![](/img/trans.png)
[英]How can I create a generic method to return a specific type specified by the call?
[英]How can I return the specified type in generic method?
我想從數據庫中獲取指定的類型值。 這是我的代碼:
public static T Get<T>(string key)
{
Databases.Context Context = new Databases.Context();
var i = Context.Setting.FirstOrDefault(_ => _.Key == key)?.Value;
if (i == null) {
return default;
}
switch (typeof(T))
{
case Type intType when intType == typeof(int):
{
if (int.TryParse(i, out int Result))
{
return Result;
}
else{
return default;
}
}
}
}
如上面的代碼,我的部分代碼即將返回int類型的值。 但是VS報錯不能將int轉T,請問如何解決? 謝謝你。
你可以這樣做,你需要轉換為相應的類型。
public static T Get<T>(string key)
{
Databases.Context Context = new Databases.Context();
var i = Context.Setting.FirstOrDefault(_ => _.Key == key)?.Value;
if (i == null)
{
return default;
}
switch (typeof(T))
{
case Type intType when intType == typeof(int):
{
if (int.TryParse(i, out int Result))
{
return (T)Convert.ChangeType(Result, typeof(T));
}
else
{
return default;
}
}
}
return (T)Convert.ChangeType(default, typeof(T));
}
您必須為不同類型提供不同版本的函數: GetAsInt
、 GetAsString
等。
一種常見的模式是在返回字符串的輔助方法中使用共享代碼,然后專門的方法調用TryParse
。
就像是:
int? GetAsInt(string name)
{
var s = GetSetting(name);
if(string.IsNullOrEmpty(s)) return null;
if(int.TryParse(s out var i)) return i;
return null; //or throw
// repeat for uint, long, etc. as needed
您還可以提供Try
版本: bool TryGet(string name, out int setting)
您可以將通用類型 T 作為參數傳遞並返回 int,如果這是函數將始終返回的內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.