由于我对此缺乏“真实姓名”,因此不确定如何措词或搜索它。C#中的某些结构可以直接用作其包含类型,例如以Nullable 为例,可以将Nullable直接视为int,例如:Nullable<int> ex;void Example(){ ex += 1;}我的问题是现在要在自己的结构中实现这种行为,例如,我可以创建一个Savable,但仍然能够像将null视为普通int一样对待变量?而不是例如执行mySavable.value。希望我的问题很清楚,毫无疑问是一个重复的问题,但是由于我缺少此“技术”的专有名称,因此在搜索中找不到另一个问题。对此非常抱歉!非常感谢! 最佳答案 Nullable<>类型是一个不好的例子。它受编译器的支持,它具有其他任何人都无法做到的魔力。您可以定义一些隐式/显式强制转换运算符,它们将隐式或显式转换YourStruct <-> int,或者您可以定义一些接受例如YourStruct + int的运算符。两种解决方案都可以解决您的问题。请注意,要获取+=运算符,您只需定义返回+的YourStruct运算符(或定义一个隐式转换int -> YourStruct)。例如,重载operator+(Example1, Example1)和重载隐式转换从/到int的转换,您可以:public struct Example1{ public readonly int Value; public Example1(int value) { this.Value = value; } public static Example1 operator +(Example1 t1, Example1 t2) { return new Example1(t1.Value + t2.Value); } // This is used only for the "int v1 = e1;" row public static implicit operator int(Example1 value) { return value.Value; } public static implicit operator Example1(int value) { return new Example1(value); }}然后Example1 e1 = 1;Example1 e2 = 2;Example1 sum1 = e1 + e2;Example1 sum2 = e1 + 4;Example1 sum3 = 4 + e1;sum3 += sum1;sum3 += 1;int v1 = e1;或者,您可以简单地在operator+和Example2之间重载各种int:public struct Example2{ public readonly int Value; public Example2(int value) { this.Value = value; } public static Example2 operator +(Example2 t1, Example2 t2) { return new Example2(t1.Value + t2.Value); } public static Example2 operator +(Example2 t1, int t2) { return new Example2(t1.Value + t2); } public static Example2 operator +(int t1, Example2 t2) { return new Example2(t1 + t2.Value); }}然后Example2 e1 = new Example2(1);Example2 e2 = new Example2(2);Example2 sum1 = e1 + e2;Example2 sum2 = e1 + 4;Example2 sum3 = 4 + e1;sum3 += sum1;sum3 += 1;int v1 = e1.Value;(请注意,operator+不是可交换的,因此我必须同时定义Example2 + int和int + Example2)关于c# - 直接访问结构的内部值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42669165/
10-10 23:14