[英]C# struct in generic method
我嘗試做這樣的事情:
class Program
{
public struct frst
{
public short Oversize_FrontInch;
public short Oversize_RearInch;
public short Oversize_RightInch;
public short Oversize_LeftInch;
public short HeightInch;
}
public struct sec
{
public short Oversize_FrontInch;
public short Oversize_RearInch;
public short Oversize_RightInch;
public short Oversize_LeftInch;
}
public void DoSmth<T>() where T:struct
{
T str = new T();
str.Oversize_FrontInch = (short)2;
}
}
但我得到“t不包含...的定義”錯誤有沒有辦法做到這一點? 重要的事情:為了休息代碼,它必須是結構。
使用這些看似不相關的結構來了解更多您想要實現的目標會很棒,但這是一個編譯和運行並將sec
和frst
保留為結構的版本:
DoSmth<sec>();
DoSmth<frst>();
void DoSmth<T>() where T: struct, IOversize
{
T str = default;
str.Oversize_FrontInch = (short)2;
Console.WriteLine(str.GetType());
}
public interface IOversize
{
short Oversize_FrontInch {get; set;}
}
public struct sec: IOversize
{
public short Oversize_FrontInch {get; set;}
}
public struct frst: IOversize
{
public short Oversize_FrontInch {get; set;}
public short HeightInch {get; set;}
}
這打印:
sec
frst
我猜你想要這樣的東西。
結構不能繼承,所以你的代碼不能做你想做的事。
您可以改為使用基類並從中繼承數據類。
但請注意,您需要繼承默認構造函數才能在泛型函數中創建數據類。
這是一個簡單的示例供您使用,您可以根據需要對其進行編輯和潤色。
using System;
public class HelloWorld
{
public class baseclass{
public short Oversize_FrontInch;
public short Oversize_RearInch;
public short Oversize_RightInch;
public short Oversize_LeftInch;
}
public class frst:baseclass
{
public short HeightInch;
}
public class sec:baseclass
{
}
public static void DoSmth<T>() where T:baseclass, new()
{
T str = new T();
str.Oversize_FrontInch = (short)2;
Console.WriteLine(str.Oversize_FrontInch);
}
public static void Main(string[] args)
{
DoSmth<frst>();
}
}
編輯:我看到有人建議使用帶有結構的接口。 有可能的。 但是,它將包裝您的所有價值,產生性能問題並創建不可讀的代碼。 我不會推薦它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.