我有一个字符串,其中包含一些我稍后将通过我的方法更改的单词: 例如:
Hello $name How are you doing ?
i'm $ask
我将使用方法更改$ name和$ ask:
public static string ReturnLetter<T>(Dictionary<string, T> value)
{
var letter = File.ReadAllText("LETTER.html");
var newletter = "";
foreach (var type in value)
{
var item = type.Value;
var newstring = item.GetType().GetMethod("ReturnValue").Invoke(null, new object[] { }).ToString();
newletter = letter.Replace(type.Key, newstring);
}
return newletter;
}
我使用以下内容返回词典值:
public static Dictionary<string, Type> returnDic()
{
var types = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "ConsoleApplication11.Packets");
var Dic = new Dictionary<string, Type>();
foreach (var t in types)
{
Dic.Add(t.Name, t);
}
return Dic;
}
我持有的类型是:
class name
{
private static string[] names =
{
"miri",
"sara",
};
public static string ReturnValue()
{
var random = new Random();
return names[random.Next(0, 1)];
}
}
我在
处获得异常(空引用)var newstring = item.GetType().GetMethod("ReturnValue").Invoke(null, new object[] { }).ToString();
我无法真正追踪错误的来源! 我现在已经坚持了一个小时
感谢任何帮助
编辑: 在有效的方法中:
public static string ReturnValue<T>()
{
return typeof(T).GetMethod("ReturnValue").Invoke(null,new object[] { }).ToString();
}
然后我意识到item.GetType()
返回RunTimeTime而不是返回哪个typeof(T)。
答案 0 :(得分:0)
由于new_friend: __main__.Student
似乎是item
,请尝试替换
Type
带
item.GetType().GetMethod("ReturnValue")...
您试图在课程item.GetMethod("ReturnValue")...
而不是课程Type
上找到该方法。由于它不存在,你得到一个空值。
但更好的架构会使用实例方法和接口。那时不需要反射来调用方法。
答案 1 :(得分:0)
我终于注意到了这个问题!
方法中的:
public static Dictionary<string, Type> returnDic()
{
var types = GetTypesInNamespace(Assembly.GetExecutingAssembly(), "ConsoleApplication11.Packets");
var Dic = new Dictionary<string, Type>();
foreach (var t in types)
{
Dic.Add(t.Name, t);
}
return Dic;
}
我返回类型而不是T类型,并且在替换方法中我获得了类型类型
foreach (var type in value)
{
var item = type.Value;
var newstring = item.GetType().GetMethod("ReturnValue").Invoke(null, new object[] { }).ToString(); ////// GetType() of Type
newletter = letter.Replace(type.Key, newstring);
}
我通过简单地将type.Value
转换为Type
var item = type.Value as Type;