|
I'm trying for manytime to do this... I don't get how to write a Main class which in it an int List gets values from the user, here is what I did so far... It makes a Run Time error:
int x;
List<int> lis = new List<int>();
Node<int> chou = lis.GetFirst();
x = int.Parse(Console.ReadLine());
lis.GetFirst().SetInfo(x);
while (chou.GetInfo() != -1)
{
x = int.Parse(Console.ReadLine());
chou.SetInfo(x);
chou = chou.GetNext();
}
All I need to know is what is the correct code.. Thank u very much תודה רבה
|
|
|
|
|
I would use:
List<int> list = new List<int>();
while (true)
{
int x;
if (int.TryParse(Console.ReadLine(), out x))
{
if (x < 0)
{
break;
}
list.Add(x);
}
}
The universe is composed of electrons, neutrons, protons and......morons. (ThePhantomUpvoter)
|
|
|
|
|
there is a program of a document manager that pushes the document to a Queue
There are 3 questions on 3 different threads, base on the same program
this is the THIRD one
the program is
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace scratchpad3
{
class Program
{
public static void Main()
{
var dm = new DocumentManager<Document>();
dm.AddDocument(new Document("Title A", "Sample A"));
dm.AddDocument(new Document("Title B", "Sample B"));
dm.DisplayAllDocuments();
if (dm.IsDocumentAvailable)
{
Document d = dm.GetDocument();
Console.WriteLine(d.Content);
Console.Read();
}
}
}
public class DocumentManager<T>
where T : IDocument
{
private readonly Queue<T> documentQueue = new Queue<T>();
public void AddDocument(T doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public bool IsDocumentAvailable
{
get { return documentQueue.Count > 0; }
}
public T GetDocument()
{
T doc = default(T);
lock (this)
{
doc = documentQueue.Dequeue();
}
return doc;
}
public void DisplayAllDocuments()
{
foreach (T doc in documentQueue)
{
Console.WriteLine(doc.Title);
}
}
}
public interface IDocument
{
string Title { get; set; }
string Content { get; set; }
}
public class Document : IDocument
{
public Document()
{
}
public Document(string title, string content)
{
this.Title = title;
this.Content = content;
}
public string Title { get; set; }
public string Content { get; set; }
}
}
Q3) Let us take a view of this part of the coding:-
public void AddDocument(T doc) // /
|
|
|
|
|
This has nothing whatsoever to do with pass by reference[^]. T just happens to be a reference type, which just means that the thing being passed by value is itself a reference. And what's a "reference variable" supposed to be anyway?
Member 9939423 wrote: Why this anomaly? What anomaly? Nothing out of the ordinary is going on here.
|
|
|
|
|
thank you for answering, at first
What i mean is that, when we declare a type we do :
<class_name> var; //----------------------------------------(1)
Here var is a reference variable
now when we objectify
var = new <class_name>(); //---------------------------------(2)
a new area is defined -- this is called object
when we say
T doc
what i mean is that is it a reference variable like (1)
or an object creation like (2)
|
|
|
|
|
Neither, it isn't "doing" anything. A declaration "does" nothing.
When you pass that thing into that method, no object is created, but the reference is copied.
|
|
|
|
|
there is a program of a document manager that pushes the document to a Queue
There are 3 questions on 3 different threads, base on the same program
this is the 2nd question
the program is :-
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace scratchpad3
{
class Program
{
public static void Main()
{
var dm = new DocumentManager<Document>();
dm.AddDocument(new Document("Title A", "Sample A"));
dm.AddDocument(new Document("Title B", "Sample B"));
dm.DisplayAllDocuments();
if (dm.IsDocumentAvailable)
{
Document d = dm.GetDocument();
Console.WriteLine(d.Content);
Console.Read();
}
}
}
public class DocumentManager<T>
where T : IDocument
{
private readonly Queue<T> documentQueue = new Queue<T>();
public void AddDocument(T doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public bool IsDocumentAvailable
{
get { return documentQueue.Count > 0; }
}
public T GetDocument()
{
T doc = default(T);
lock (this)
{
doc = documentQueue.Dequeue();
}
return doc;
}
public void DisplayAllDocuments()
{
foreach (T doc in documentQueue)
{
Console.WriteLine(doc.Title);
}
}
}
public interface IDocument
{
string Title { get; set; }
string Content { get; set; }
}
public class Document : IDocument
{
public Document()
{
}
public Document(string title, string content)
{
this.Title = title;
this.Content = content;
}
public string Title { get; set; }
public string Content { get; set; }
}
}
Please refer to line indicated as "//************************1
"
& also Please refer to line indicated as "//************************2"
Q2) Here if we note this :
public class DocumentManager<T>
where T : IDocument {// code}
var dm = new DocumentManager<Document>();
when T is constrained for type IDocument , how could we manage:
<Document
>
|
|
|
|
|
there is a program of a document manager that pushes the document to a Queue
There are 3 questions on 3 different threads, base on the same program
the program is :-
using System;
using System.Threading;
using System.Threading.Tasks;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
namespace scratchpad3
{
class Program
{
public static void Main()
{
var dm = new DocumentManager<Document>();
dm.AddDocument(new Document("Title A", "Sample A"));
dm.AddDocument(new Document("Title B", "Sample B"));
dm.DisplayAllDocuments();
if (dm.IsDocumentAvailable)
{
Document d = dm.GetDocument();
Console.WriteLine(d.Content);
Console.Read();
}
}
}
public class DocumentManager<T>
where T : IDocument
{
private readonly Queue<T> documentQueue = new Queue<T>();
public void AddDocument(T doc)
{
lock (this)
{
documentQueue.Enqueue(doc);
}
}
public bool IsDocumentAvailable
{
get { return documentQueue.Count > 0; }
}
public T GetDocument()
{
T doc = default(T);
lock (this)
{
doc = documentQueue.Dequeue();
}
return doc;
}
public void DisplayAllDocuments()
{
foreach (T doc in documentQueue)
{
Console.WriteLine(doc.Title);
}
}
}
public interface IDocument
{
string Title { get; set; }
string Content { get; set; }
}
public class Document : IDocument
{
public Document()
{
}
public Document(string title, string content)
{
this.Title = title;
this.Content = content;
}
public string Title { get; set; }
public string Content { get; set; }
}
}
Please refer to line indicated as "//************************1"
Q1) How would these 2 declarations and its corrosponding objects differ :
i )
IDocument ido = new IDocument();
and
ii)
public class DocumentManager<T> where T : IDocument {// code}
var dm = new DocumentManager<IDocument>(); // pls note this IS A DEVIATION form // the code
|
|
|
|
|
Well, i) doesn't work because IDocument is an interface - which can't be instantiated because there's no implementation of it. It's just a contract.
|
|
|
|
|
In my windown application, I have a listview, which contains two columns. One of the subitem in a row contains the data as below.
"Failed testcase path=C:\temp\test.jpg"
I need to provide hyperlink to only "C:\temp\test.jpg". If I click on the same, it should open the corresponding image.
I tried by changing the property HotTaracking to true.
listView1.HotTracking = true;
But it shows hyperlinks to all the rows in listview.
Is there a way to achieve this?
|
|
|
|
|
I wrote a simple keylooger and i test it on win7 and all things is work successfuly but it dont work on xp system and show this message
"unable to find a version of runtime to run this application " how can i solve this proplem????
c#
|
|
|
|
|
It means that you are using a version of the dotNet Framework that is not installed on the XP machine. Ensure that the correct version is installed and your application should run.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
I hope for your own good, that you're writing that keylogger purely out of academic curiosity. Deploying such a piece of software on a machine unbeknownst to its user is like opening Pandora's box or a can of worms if you like. Depending on what jurisdiction you live in the legal implications might be quite severe. So if you plan on using this covertly you'd better be prepared and have your ass covered by a legal department.
Regards,
— Manfred
"I had the right to remain silent, but I didn't have the ability!"
Ron White, Comedian
|
|
|
|
|
I want to save a collection of custom objects. It seems that I succeed but when I try to retrieve the setting after the program restarts, the data is gone. I have searched extensively for the solution but to no avail. Here is what I have. Any help would be deeply appreciated.
In my settings.cs file I have added the following code.
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public List<Account> Accounts
{
get
{
return ((List<Account>)(this["Accounts"]));
}
set
{
this["Accounts"] = value;
}
}
Then I have the class marked as serializable. I have the following code at window close and as you can see it does compile so it picks up on the code and the data is there after I save it using the debugger to verify.
Properties.Settings.Default.Accounts = accounts.List;
Properties.Settings.Default.Save();
All should be ok when I run the following code except the data just isn't there as it has a value of null.
if (Properties.Settings.Default.Accounts != null)
{
accounts.List = Properties.Settings.Default.Accounts;
}
|
|
|
|
|
Did you check the XML file to make sure its getting written out?
|
|
|
|
|
Where does it put the xml file and if it's not writing to the xml file where should I look to find out why?
|
|
|
|
|
On Windows 7 it'll put it in C:\Users\<username>\AppData\<CompanyName>\<long gibberish directory name that begins with your EXE name>\<version>\user.config
Your code looks like it should work, just make sure you call Properties.Settings.Default.Save(); and write the value to Properties.Settings.Default.PropName.
How are you specifying versions? If you are doing the auto increment version thing (or you change your version number between runs), there is an additional step you need to do to migrate the settings. You will need to call UpgradeSettings(). However, that is only needed when the version number changes. If you are using auto increment version numbers, your version will change everytime you compile, so you'd need to call UpgradeSettings() all the time.
If you are just leaving it at 1.0.0.0 or whatever for now, UpgradeSettings() is not the issue, just keep in mind you'll need to use it in the real, final implementation.
|
|
|
|
|
At the moment I don't have versions so upgrade isn't the issue. As you can see by the code, it is being saved and as I noted before, the class is there because I can see it right there in the debugger. I assume that because I can see it in the debugger that there is no serialization issue but maybe I am wrong. The class itself is not too complex. It is 4 strings and 2 decimal variables so I think it can be serialized. I checked where you said and there is no xml file so that is definitely the issue. I just don't know why there is no xml file.
|
|
|
|
|
What does your AssemblyInfo.cs look like? Are you getting any exceptions? Are you running the app as admin or some kind of restricted user? What does your app.config look like?
EDIT: I looked back at your original post and it seems like you hand edited the settings.cs file? So the issue might be that your app.config is out of sync (doesn't contain the necessary entries).
|
|
|
|
|
I did not edit the app.config file at all. What do I need to put in the app.config file?
|
|
|
|
|
Yeah, that's what drives the whole thing . Did you create the Settings.settings file? You should create your settings through the Visual Studio settings editor and that'll populate the app.config for you.
|
|
|
|
|
I would have done that from the beginning but my type is not supported there.
|
|
|
|
|
You can do custom types there, but its a little tricky . Once you get your code all compiling, in the type you select Browse and in the edit box, you type in the fully qualified name of your type.
Hmm... I just tried this in VS2012 and I guess they don't write to the app.config for custom types anymore. They did in 2010.
Did you check your AssemblyInfo.cs file? If you don't have a company name specified, it won't work. That I did just verify.
In addition, what does your Account class look like?
Do you have public PROPERTIES and not public variables? Do you have a public parameterless constructor?
I didn't need the constructor in my test app that i just tried... just trying to trouble shoot all the gotchas .
|
|
|
|
|
I didn't have a company but I added it and it didn't help. I will just put the code for the class and the nested class. Also as I noted before I never touched the app.config file so if I do need to make changes to that then I would need to know how to do that.
Here is the Accounts class
[Serializable]
public class Accounts
{
public Accounts()
{
List = new List<Account>();
}
public List<Account> List { get; set; }
public decimal TotalBalance()
{
decimal balance = 0;
foreach (Account a in List)
{
balance += a.Balance;
}
return balance;
}
public decimal TotalEquity()
{
decimal equity = 0;
foreach (Account a in List)
{
equity += a.Equity;
}
return equity;
}
}
And here is the Account class
[Serializable]
public class Account
{
public Account(string path)
{
Path = path;
Initialize();
}
private bool Initialize()
{
using (FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Broker = values[0];
Name = values[1];
AccountNumber = values[2];
Balance = decimal.Parse(values[3]);
Equity = decimal.Parse(values[4]);
break;
}
}
}
return true;
}
public bool Update()
{
using (FileStream fs = new FileStream(Path, FileMode.Open, FileAccess.Read))
{
using (StreamReader reader = new StreamReader(fs))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine();
var values = line.Split(',');
Balance = decimal.Parse(values[3]);
Equity = decimal.Parse(values[4]);
break;
}
}
}
return true;
}
private string Path;
public string Broker { get; set; }
public string Name { get; set; }
public string AccountNumber { get; set; }
public decimal Balance { get; set; }
public decimal Equity { get; set; }
}
|
|
|
|
|
A class will not xml serialize unless it has a public parameterless constructor. For successful deserialization it must be possible to completely set the object's state by assigning values to it's public properties.
In effect the deserializer is doing something like this:
Account acc = new Account();
acc.Broker = savedBroker;
acc.Name = savedName;
.... etc.
Without the necessary public parameterless constructor the serialization will silently fail (really helpful Microsoft!). You can add the constructor but then it looks like an Account cannot be restored fully as the object is strongly coupled to a specific file via the Update method and the Path has not been serialized. Think about the design carefully before adding a public Path property as the information stored in the file and in the serialized settings may be different.
Alan.
|
|
|
|