I think I outsmarted myself this time. Feel free to edit the title also I could not think of a good one.
I am reading from a file and then in that file will be a string
Change:
if (typeof(T) is string)
to:
if (typeof(T) == typeof(String))
The is operator is only valid on class instances. T is not actually an instance it is a type, therefor using is will not compile in your code because you need to compare 2 types. You can read more about it on msdn here.
The line
if (typeof(T) is string)
will always return false sine the typeof operator gives a Type object. You should replace it with
if (T is string)
In addition you should look at the Convert.ChangeType method. It may be of help here.
if(typeof(T) == typeof(string))
{
return (T)Parameter;
}
else
{
// convert the value to the appropriate type
}
Use typeof(T) == typeof(string)
So here is the answer I came up with, I am a little worried about boxing and unboxing but it works for now
public class WorkContainer:Dictionary<string, object>
{
public T GetKeyValue<T>(string Parameter)
{
if (Parameter.StartsWith("[? "))
{
string key = Parameter.Replace("[? ", "").Replace(" ?]", "");
if (this.ContainsKey(key))
{
if (typeof(T) == typeof(string) )
{
// Special Case for String, especially if the object is a class
// Take the ToString Method not implicit conversion
return (T)Convert.ChangeType(this[key].ToString(), typeof(T));
}
else
{
return (T)this[key];
}
}
else
{
return default(T);
}
}
else
{
return (T)Convert.ChangeType(Parameter, typeof(T));
}
}
}