Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调用类型方法返回异常_C#_.net - Fatal编程技术网

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")...
您试图在class
Type
而不是class
name
上找到该方法。因为它不存在,所以得到一个空值


但更好的体系结构将使用实例方法和接口。然后就不需要反射来调用方法了。

我终于注意到了这个问题

在方法中:

    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;