为什么不能在Humanizer库中使用TextInfo.ToTitleCase方法?

时间:2018-08-20 22:02:46

标签: c# visual-studio humanizer

我从GitHub page下载了Humanizer库的代码,并且在查看{{1}上的某些方法时,我在Intellisense窗口中注意到黄色的“状态警告”图标时,正在测试代码中的某些更改。 }}类:

Status warning on method Intellisense

我以前从未在Intellisense中看到过此图标,并且想知道它的含义。我可以在普通应用程序中进行此方法调用而不会出现任何错误。

在这种情况下,我也不确定TextInfoHumanizer(netstandard1.0) - Not Available的含义。

这是我正在使用的代码:

Humanizer(netstandard2.0) - Available

出现此错误:

  

'TextInfo'不包含'ToTitleCase'的定义,并且找不到可以接受的扩展方法'ToTitleCase'接受类型为'TextInfo'的第一个参数(您是否缺少using指令或程序集引用?)

为什么不能使用Humanizer库中的 public string Transform(string input) { TextInfo textInfo = CultureInfo.InvariantCulture.TextInfo; return textInfo.ToTitleCase(input); } 方法?

2 个答案:

答案 0 :(得分:2)

  

在这种情况下,我还不确定什么是Humanizer(netstandard1.0)-不可用和Humanizer(netstandard2.0)-可用。

.NET Core 1.0(.netstandart = .NET Core)不支持ToTitleCase方法,但在2.0版本中支持该方法。您可能使用的是不受支持的版本,因此会出现错误。

您可以查看documentation of ToTitleCase来了解它支持哪些版本。

答案 1 :(得分:2)

他们正在执行一种称为“多目标”的操作,其中,他们的代码生成两种不同版本的库,一个版本与netstandard1.0 API兼容,另一个与netstandard2.0 API兼容:

 <TargetFrameworks>netstandard1.0;netstandard2.0</TargetFrameworks>

TextInfo.ToTitleCase()直到2.0版才被添加到.Net Core中,因此,如果您要定位netstandard之前的任何2.0框架,则无法使用它。有关哪些运行时/平台支持哪些.Net Standard版本的列表,请参见.NET Standard

除非您使用的是“条件编译”编译器指令,否则您必须将代码限制为最低API支持的API。从本质上讲,您可以在其中为较低级别的目标提供高层API函数的替代实现。有关此示例,请参见Microsoft .Net Core文档中的How to Multitarget

这样做的原因是提供一个较小且通常不太复杂(在代码方面)的库版本,该库可以在可以使用更高级别API的项目中使用,但也不能使用该版本。更高级别的API。