C# 通过值将字符串与可字符串对象进行比较的最合适方法是什么?

C# 通过值将字符串与可字符串对象进行比较的最合适方法是什么?,c#,reference,refactoring,resharper,windows-store-apps,C#,Reference,Refactoring,Resharper,Windows Store Apps,为此: if (args.Parameter == "ContactIntermediaryPage") …在NavigatedTo()事件处理程序中,Resharper告诉我:“可能是意外的引用比较;要获得值比较,请将左侧强制转换为键入‘string’” 那么,我是否应该将其更改为以下内容之一,如果是,应更改为哪一项: if ((string)args.Parameter == "ContactIntermediaryPage") if (args.Parameter.ToString()

为此:

if (args.Parameter == "ContactIntermediaryPage")
…在NavigatedTo()事件处理程序中,Resharper告诉我:“可能是意外的引用比较;要获得值比较,请将左侧强制转换为键入‘string’”

那么,我是否应该将其更改为以下内容之一,如果是,应更改为哪一项:

if ((string)args.Parameter == "ContactIntermediaryPage")

if (args.Parameter.ToString() == "ContactIntermediaryPage")

if (args.Parameter.Equals("ContactIntermediaryPage"))

我会选择第三个,使其也不区分大小写(如果适合您的情况)


换言之,如果要与
字符串
进行比较,请将等式a
字符串的左半部分
,以便向编译器和代码读者明确,在这一行中要做什么。

如果args.参数始终是字符串,则第一个参数。这样可以节省额外的通话时间

否则,第二个条件是且仅当所有可能的字符串都在代码中。如果是这样,我会将字符串定义为常量,并尽可能在一个地方引用它们


如果以上两项都不正确,那么就使用Tigran的答案。

对于
null
情况下
args.Parameter
为null是否有任何问题?这肯定会产生重大影响,具体取决于您使用的选项。
if(args.Parameter.Equals(“ContactIntermediaryPage”)
不起作用-因为它需要一个类型为
Parameter
Prb的对象来说明明显的,但要补充的是,如果您真的关心case(它总是在case中),您不需要使用
InvariantCultureIgnoreCase
if (args.Parameter.ToString().Equals(
               "ContactIntermediaryPage", 
                StringComparsion.InvariantCultureIgnoreCase))