簡體   English   中英

具有不同var類型的C#調用返回類型

[英]C# call return type with different type of var for argument

我有一些屬性的結構。 其中一些屬性設置為一種類型的變量,例如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#。 如果這不正確或一個怪異的問題,非常抱歉。

如果有不清楚的地方,請告訴我,以便我澄清。

通用結構/類和通用函數如何:

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 { }

您可以使用相同的名稱定義具有不同類型的多個函數,這稱為函數重載。

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

但是,這不能解決如何將數據存儲在Answer對象中的問題。 解決該問題的最常見方法是使用泛型

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

然后可以定義set_values以返回答案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){...}

如果您非常需要運行時動態存儲,則可以始終使用動態存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM