C# 调用类型方法返回异常
我有一个字符串,其中包含一些单词,稍后将通过我的方法进行更改: 例如:C# 调用类型方法返回异常,c#,.net,C#,.net,我有一个字符串,其中包含一些单词,稍后将通过我的方法进行更改: 例如: 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");
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;
}
我在上收到异常(空引用)
我真的无法跟踪错误的来源!
我已经被困在这里一个小时了
谢谢你的帮助
编辑:
在有效的方法中:
public static string ReturnValue<T>()
{
return typeof(T).GetMethod("ReturnValue").Invoke(null,new object[] { }).ToString();
}
public静态字符串ReturnValue()
{
return typeof(T).GetMethod(“ReturnValue”).Invoke(null,新对象[]{}).ToString();
}
然后我意识到
item.GetType()
返回运行时,而不是返回哪个typeof(T) 由于项目
似乎是类型
,请尝试更换
item.GetType().GetMethod("ReturnValue")...
与
item.GetMethod("ReturnValue")...
您试图在classType
而不是classname
上找到该方法。因为它不存在,所以得到一个空值
但更好的体系结构将使用实例方法和接口。然后就不需要反射来调用方法了。我终于注意到了这个问题 在方法中:
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;
}
我通过简单地将type.Value
转换为type解决了这个问题
var item = type.Value as Type;
这个问题在我看来像是一个问题;请参阅尝试将该语句分解为多个语句,并在每一点检查调试器以了解发生了什么。@HansKesting我试图直接使用change方法,但没有传递字典,它只传递一个类,但当我将所有类作为字典传递时,它不起作用,我检查了多个我上课和上课的时间methods@SimonWilson名称空间类中的所有方法都是静态的,作为默认BindingFlag我正在使用反射,因为我将替换超过10个字,这将导致更多的代码行,并且项是T类型,因为它的值是
var item=type.value代码>这是对的,但该项包含一个键对值,我必须获取一个类型的值,然后获取它的方法,而不首先获取它的类型,因为它已经是一个类型了!
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);
}
var item = type.Value as Type;