对于参数

时间:2018-06-11 17:06:47

标签: c# variables parameter-passing

我有一个带有一些属性的结构。 其中一些属性设置为一种变量,如string int等。 但是有一个变量需要接受不同类型的变量。我尝试过以下方法:

public class Test{

    Public Generate_Scentence(){
        Answer new = set_values("test", SomeTypeOfVariable);
        //some use case examples:
        Answer new2 = set_values("test2", "test2");
        Answer new2 = set_values("test3", 48584);
        Answer new2 = set_values("test4", 4.4f);
        Answer new2 = set_values("test5", CustomClass a);
        //etc etc
    }


    public struct Answer{
        public string read;
        public System.Object val;
    }

    public Answer set_values(string t, System.Object v){
        Answer a = new Answer();
        a.read = t;
        a.val = v;
        return a;
    }


}

在这种情况下,SomeTypeOfVariable应接受以下类型:

string something
int something
CustomClass something
float something 
etc etc

在javascript中,我可以这样做:

var something = whateveriputhere

我似乎无法弄清楚如何做到这一点。我真的只熟悉javascript这是我第一次参加c#。很抱歉,如果这不正确或是一个奇怪的问题。

如果有什么不清楚让我知道,我可以澄清。

2 个答案:

答案 0 :(得分:1)

通用结构/类和泛型函数如何:

public class Test
{

    public void Generate_Scentence()
    {
        var new1 = set_values("test", new SomeTypeOfVariable());
        var new2 = set_values("test2", "test2");
        var new3 = set_values("test3", 48584);
        var new4 = set_values("test4", 4.4f);
        var new5 = set_values("test5", new CustomClass());
        //etc etc
    }


    public Answer<TData> set_values<TData>(string t, TData v)
    {
        var a = new Answer<TData>();
        a.Read = t;
        a.Val = v;
        return a;
    }
}

public struct Answer<TData>
{
    public string Read { get; set; }
    public TData Val { get; set; }
}

public class SomeTypeOfVariable { }
public class CustomClass { }

答案 1 :(得分:0)

您可以定义多个具有相同名称的函数,这些函数采用不同类型的函数重载。

public Answer set_values(string t, string v){...}
public Answer set_values(string t, int v){...}

但是,这并没有解决如何在Answer对象中存储数据的问题。该问题最常见的解决方案是使用generics

public class Answer<T>
{
    T val {get;set;}
...
}

然后,您可以定义set_values以返回Answer T

public Answer<string> set_values(string t, string v){...}
public Answer<int> set_values(string t, int v){...}

正如有人在评论中指出的那样,如果你没有根据类型做任何特定的事情,你也可以使set_values通用。

public Answer<T> set_values<T>(string t, T value){...}

如果您非常需要运行时动态存储,那么您总能回归动态。