C# 创建与关键字同名的属性名称

C# 创建与关键字同名的属性名称,c#,syntax,C#,Syntax,我肯定这个问题以前有人问过,但我找不到我需要的答案 我正在使用C#创建一个程序集,其中一个结构名为need。我正在努力做到以下几点: internal struct need { internal need how { get { return how; } } internal need true { get { return

我肯定这个问题以前有人问过,但我找不到我需要的答案

我正在使用C#创建一个程序集,其中一个结构名为need。我正在努力做到以下几点:

internal struct need {
    internal need how
    {
        get
        {
            return how;
        }
    }
    internal need true
    {
        get
        {
            return true;
        }
    }
}
我想创建一个名为true的新属性。需要 显然IDE不喜欢这样,因为我正在尝试创建一个与关键字同名的属性

显而易见的解决办法是把名字改成别的名字,比如“真相”,但我的心告诉我,这不是我应该做的

这使我的兴趣达到顶峰。从理论上讲,您可以创建一个变量(或其他任何变量),程序集应该能够根据上下文和范围确定您引用的变量。如果我说:(伪代码)

或者如果我做了类似的事情:

create int number // In the want struct
create int number // In the need struct
程序集根据上下文或作用域确定要创建的类型应该没有问题。唯一的问题是IDE似乎没有使用正确的作用域,不允许我构建

我试过了,真的,需要。真的,这个。真的,等等,都没有用

我确信,让我的程序集确定它的“需要”结构中的“true”是它的功能所必需的,因为程序集需要能够在特定的范围和上下文中使用它自己的true类型,而不是语言或任何指定它的语言所指定的类型

我们如何做到这一点


另外,这些属性之所以是属性,是因为我基本上可以将它们设置为只读。如果您可以告诉我如何将它们放入内部结构并只读…

您可以在关键字前加上前缀
@

internal struct need
{
    // btw your properties will result in a infinit loop
    internal need how
    {
        get
        {
            return how;
        }
    }
    internal need @true
    {
        get
        {
            return @true;
        }
    }
}
编辑:

如果需要从该属性返回
true
,则必须实现
隐式运算符需要(bool)

或者,更改退货类型:

internal bool @true { get { return true; } }

对于trueLinked重复回答您的问题(使用
@
),如何使用True。旁注:大多数人可能会考虑用保留词来命名属性是一个可怕的想法,但这是严格的意见基础,如果你从不向别人展示你的C代码,那就行了。请确保您的未来与该问题没有直接关系,请使用常规名称并遵循默认的C#命名约定(即,类/属性使用大写-
Need
)我知道的唯一方法是在结构内部声明内部只读“thingy”,即使其成为只指定get的属性,没有定案。我唯一能让它回来的就是它本身。我认为它最终会返回null或void,而不是一个无限循环。程序集只需要知道需求是否存在,而不是它内部的值是什么,并且永远不会真正调用需求,它只会查看调用是否可能(如果存在)。我真的不明白使用@true与使用单词truth(它不是?)有什么不同,我想让它来确定它自己的true。在
@true.get
中返回
true
是没有意义的,因为返回类型是
need
而不是
bool
。该评论仅基于您问题中给出的信息。感谢您的回复。不管它返回什么,等等。你没有回答这个问题。我问你如何使用相同的名称作为关键字,你的答案是使用不同的名称。这不是我们需要的解决方案……如果你需要像
need.true
那样使用它进行一些反射黑客攻击,那么你就不能。但是,属性名实际上是
“true”
,没有
@
,如果您通过ReflectionRight进行检查,我想这样可以工作吗?我真的不确定把@放在它前面到底有什么作用。我知道你可以用它来表示sting文字,这就是我在官方文档中所能找到的@的全部内容。将@放在它前面似乎是某种命名约定,它最终是一个不同的名称,比如使用大写的True,或者是一个完全不同的名称,比如foobar。必须有办法做到这一点,也许@does我不确定(对不起,我一直在编辑。)
internal struct need
{
    internal need @true
    {
        get { return true; }
    }

    public static implicit operator need(bool value)
    {
        // todo: initialize it
        return new need();
    }
}
internal bool @true { get { return true; } }