区分字符串文字与字符串C#

时间:2010-10-16 05:18:37

标签: c# .net string string-literals

我想做点什么

IsItAStringLiteral("yes")
var v = "no";
IsItAStringLiteral(v)

具有明显的回报价值。有可能吗?

2 个答案:

答案 0 :(得分:4)

没有。您将无法判断字符串是否为文字。

简单的原因:文字,字符串变量,各种实习字符串......每一个都是对System.String的引用。并且所有字符串在按值传递时都会在使用它们的函数调用之前加载到堆栈上(因此,与引用它们的任何变量的名称无关)。在调用函数时,文字和变量看起来完全相同,并且在按值传递时将被视为完全相同。

可能的唯一方法是一些可能检查对象地址的unsafe内容。如果地址在程序集的地址空间内,它几乎肯定来自某种常量。但这是不可靠的(因为字符串设置为文字看起来就像文字),非常hackish,丑陋,最重要的是我无法想到任何目的。

如果你不得不关心一个字符串是不是字面意思,你应该重新考虑你正在做的事情。

答案 1 :(得分:2)

您可以使用string.IsInterned方法来确定给定字符串是否在.NET实习池中。在应用程序开始运行之前,所有字符串文字都会自动添加到实习池中。

当然,这对您的确切问题无济于事。变量'v'将引用字符串文字,因此它也将出现在实习池中。你为什么需要这样的功能?