C# 结构,它返回一个字段的值,该字段的语法与(比如)Int相同
很可能我只是感到困惑,如果我知道得更清楚的话,我就不想这样做了,但下面是: 当你有C# 结构,它返回一个字段的值,该字段的语法与(比如)Int相同,c#,struct,C#,Struct,很可能我只是感到困惑,如果我知道得更清楚的话,我就不想这样做了,但下面是: 当你有intmyint=5只需调用变量名即可访问该int的值:int myOtherInt=myInt+1或myInt++ 我有一个结构,我想这样做,并返回一个现有的值类型 简而言之,结构有一个Func字段,并提供该函数的结果;它还具有用于钳制输出的最小/最大字段,而不管函数的原始结果如何 Func<Foo, int> _func; int _min; int _max; public MyStruct(F
intmyint=5
只需调用变量名即可访问该int的值:int myOtherInt=myInt+1代码>或myInt++代码>
我有一个结构,我想这样做,并返回一个现有的值类型
简而言之,结构有一个Func字段,并提供该函数的结果;它还具有用于钳制输出的最小/最大字段,而不管函数的原始结果如何
Func<Foo, int> _func;
int _min;
int _max;
public MyStruct(Func<Foo, int> func, int min, int max) {...}
// Doesn't work
public int this
{
get { return Clamp(_min, _max, _func()); }
}
Clamp(min, max, val) {}
您应该检查隐式运算符:
它有局限性,但可以
让你走很长的路
这是一篇很好的文章,它包含了一些示例和它的一个局限性:
您可以通过实现公共静态隐式操作符int(MyStruct astruct)
(有关详细信息,请参阅)和操作符+
(有关教程,请参阅)
我想是这样的
int myInt = myStruct + 5;
应该可以工作,为myStruct+5
调用operator+
,然后为myInt=
部分调用implicit operator int
。为什么不直接重载operator+(myStruct a,int b)
教程:这里有两个选项供您选择。你们可以定义一个,或者你们可以定义你们感兴趣的每个人
下面是使用隐式cast操作符的完整示例。否需要实现此
属性
using System;
public struct MyStruct
{
public static implicit operator int(MyStruct myStruct)
{
return 2;
}
}
public class Test
{
public static void Main(string[] args)
{
var myStruct = new MyStruct();
var myInt = myStruct + 5;
Console.WriteLine("Int value: {0}", myInt);
}
}
在本例中,myStruct+5
使用已实现的重载运算符将结构隐式转换为整数。这是一个很好的观点。我关注这个特定的行为,但是感谢你的链接,我不知道。好吧,我假设我们会将“this”定义保留在中。this
property东西的语法无效。(int)this
行将尝试显式地将this
转换为int
,默认情况下,除非有公共静态显式运算符int(MyStruct m)
实现,否则将失败。是的,我最终得到了它。:)谢谢你指出这一点。显然我该睡觉了。我在想他们的意思是,对于int的作业来说,它不起作用,只是没有经过整个思考过程。谢谢你解决了这个问题。我希望我也能接受你的回答,因为它很好地完成了丹·塞西尔的回答。他让我先到了那里。别担心,很高兴听到你的问题得到了解决!不必太担心你给了谁荣誉,给解决了你问题的人荣誉对我来说非常有意义:)
using System;
public struct MyStruct
{
public static implicit operator int(MyStruct myStruct)
{
return 2;
}
}
public class Test
{
public static void Main(string[] args)
{
var myStruct = new MyStruct();
var myInt = myStruct + 5;
Console.WriteLine("Int value: {0}", myInt);
}
}
using System;
public struct MyStruct
{
public static implicit operator int(MyStruct myStruct)
{
return 2;
}
}
public class Test
{
public static void Main(string[] args)
{
var myStruct = new MyStruct();
var myInt = myStruct + 5;
Console.WriteLine("Int value: {0}", myInt);
}
}