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);
    }
}