|
Could try creating a method in the class that takes param name and value, then do a switch and assign the value to the property required
If only MySelf.Visible was more than just a getter...
A person can produce over 5 times there own body weight in excrement each year... please re-read your questions before posting
|
|
|
|
|
thanks for the idea, for now something like that is my workaround solution.
However I wanted to avoid writing special code into the AClass itself as well. I was thinking of something generic that could either AClass inherit from or a Wrapper class.
zilo
|
|
|
|
|
If it's only the one property you could use an implicit operator overload.
public class AClass
{
public AClass() : this(string.Empty) { }
private AClass(string aValue)
{
AValue = aValue;
}
public static implicit operator AClass(string aValue)
{
return new AClass(aValue);
}
public string AValue
{
get;
set;
}
}
AClass aInstance = "Test String";
Console.WriteLine(aInstance.AValue);
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
Interesting idea, but... It's not only one, there will be many properties like this within AClass. And it needs to be done outside of constructor.
zilo
|
|
|
|
|
Maybe extension methods could work. Create an extension method ToAClass for each type, and also pass the AClass instance.
public static class ExtensionMethods
{
static public void SetAClass(this string value, AClass instance)
{
instance.AString = value;
}
static public void SetAClass(this int value, AClass instance)
{
instance.AInt = value;
}
}
public class AClass
{
public string AString
{
get;
set;
}
public int AInt
{
get;
set;
}
}
AClass aInstance = new AClass();
"Test string".SetAClass(aInstance);
123.SetAClass(aInstance);
DaveBTW, in software, hope and pray is not a viable strategy. (Luc Pattyn)Visual Basic is not used by normal people so we're not covering it here. (Uncyclopedia)
|
|
|
|
|
Anyhow, whether is it extension methods or not, I'll have to create them dynamically using reflection and then just call those methods. I think I have a better idea now, thanks
zilo
|
|
|
|
|
Zilo(svk) wrote: and I want to assing value to AClass.AValue without actually explicitly writing
It's difficult to answer without knowing why. Is it because you don't know the type at compile time?
|
|
|
|
|
Yes. I'm loading the class from dll as
Assembly.LoadFile(string file);
And I'd like to keep AClass as simple as possible, without any specific code to read or write values into it. It's just a data container.
zilo
|
|
|
|
|
Well, LINQ knows the types of data objects at compile time, so there's no similarity there.
Without reflection, I guess your best bet is emitting the IL directly[^].
|
|
|
|
|
It doesn't have to, I'm using those classes to work with linq as well and it's working fine. Thanks for the suggestion, that looks to be the only way to go.
zilo
|
|
|
|
|
Zilo(svk) wrote: I'm using those classes to work with linq as well and it's working fine
Now I'm curious - can you paste a snippet of code that does that? I can't imagine LINQ working without you specifying the type somewhere (unless it's an anonymous type, of course).
|
|
|
|
|
I ment the classes are not present withing the same solution or assembly when compiling the code. When working with linq, I'm using strong types. This is a sample of one of the classes:
[Table(Name = "Books")]
public partial class Book : IDALEntity
{
private int _BookId;
private string _Title;
private int _Price;
private int _PublisherID;
public Book()
{ }
[Column(Storage = "_BookId", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL", IsPrimaryKey = true)]
public int BookId
{
get
{
return this._BookId;
}
set
{
this._BookId = value;
}
}
...
}
zilo
|
|
|
|
|
Well, LINQ uses reflection to read the custom attributes you provide for each property, so that it can map them to database columns. I guess they do it just once and then generate dynamic code to do the actual translation from SQL results to object property assignments.
|
|
|
|
|
Basically, you are searching for an alternative to Reflection, right?
Calin
|
|
|
|
|
Kind of. Something that does the job but keeps the speed on same level as direct access.
zilo
|
|
|
|
|
I think you could try by using Dynamic Invocation.
Calin
|
|
|
|
|
Do you suggest to create a method using reflection on the fly:
void AssingAValue(AClass aInstance, object value)
{
aInstance.AValue = value;
}
and then just call this method?
zilo
|
|
|
|
|
yes, so you can dynamically change the AValue property.
Calin
|
|
|
|
|
Also, you can use TypeDescriptor , and PropertyDescriptor .
Calin
|
|
|
|
|
Hi!
I am building a windows application in C#. I need to have a support for google maps within the application. I have a form with a web browser, and I want to navigate the web browser to google maps with street, city, state and zip from the app db, depending from the selected member. Can you guys navigate me or give me some hint how should I solve this issue. I will really appreciate. Thanks ahead, Laziale
|
|
|
|
|
http://mapki.com/wiki/Google_Map_Parameters[^]
This link shows the parameters you can pass in the url for google
If only MySelf.Visible was more than just a getter...
A person can produce over 5 times there own body weight in excrement each year... please re-read your questions before posting
|
|
|
|
|
How do I make a Console (or windows form) application that accepts a single line that will have a calculation such as 47 + 23 typed in, and return the answer (70 in this case) and can handle +, -, *, /
I just need to know how to split the line up to get the numbers and operation separate to use in an if statement
|
|
|
|
|
You need to create a simple math parser for this. Is not a matter of just splitting chars.
Basically you need to identify the tokens from your line(numbers, operators,...) by implementing a Lexer. After that you'll need a Parser.
Have a look here[^] or here[^]
Calin
|
|
|
|
|
first get the input line as a string
then remove all spaces so you get something like 47+23
then split the string based on the valid operators i.e. + - * /
you will need to also store them in an array
so then you should have two string arrays i.e values[] and operators[]
then you can do a loop for each value
int result = int.Parse(values[0]);//will be your result
for(int i = 1; i < values.Length; i++)
{
string op = operators[i-1];
int val = values[i];
switch(op){
case "+":
result += val;
break;
case "-":
result -= val;
break;
...//and so on
}
}
this is just an idea of the top of my head, the logic is there so it should work but you will need to handle error checking and also the calculation will be done in order of appearence rather than operator priority i.e. 2 + 5 * 7 would equal 49 not 37
If only MySelf.Visible was more than just a getter...
A person can produce over 5 times there own body weight in excrement each year... please re-read your questions before posting
|
|
|
|
|