Custom Controller.cs.t4仅在错误时起作用



我已将T4脚手架模板复制到我的Visual Studio 2017项目中,以便我可以自定义它们。大多数情况下工作正常。但是Controller.CS.T4中的一行会引起头痛。这条有问题的线需要这样的脚手架才能工作:

var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, length:1).ToLowerInvariant() + entitySetName.Substring(1)));

,必须这样的项目才能建立:

var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, length-1).ToLowerInvariant() + entitySetName.Substring(1)));

注意差异:长度:1 vs length-1

长度:1我立即得到语法错误,但是脚手架正常。

使用长度1,无语法错误,但是脚手架失败说:"编译转换:名称'长度'在当前上下文中不存在在线号码'54'和列号'54'和列号'127'"

有人可以解释正在发生的事情和/或建议修复吗?来回切换正在变老。

,因此要启动操作员:1-1从根本上不是同一件事。:操作员有点奇怪,我在其中没有太多用途,但我承认它有位置。

当您要将特定参数指定到方法中时,使用:操作员,例如,我们有一种看起来像这样的方法:

void DoSomething(int numberOne = 0, int numberTwo = 0, int numberThree = 0)

我们想将此方法用于某些东西,但是更改numberThree的值而不指定numberOnenumberTwo,那么可以通过:操作员来实现这一点:

DoSomething(numberThree: 3);

看看我做了什么?我指定了参数numberThree,并在数字3中传递。我也可以做:

dosomething(0,0,3(;

有关此此处的更多信息:

https://learn.microsoft.com/en-us/dotnet/csharp/programmpramming-guide/classes-and-ships-and-scrupts/named-and-ynemed-and-yptional-arguments

-是一个数学函数,减去

,因此更简单地解释了
3-1=2

使用变量时,我们必须为一个值分配一个变量名称:

var length = 1

我们使用它之前:

 length-1

第二个问题的答案

var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, length-1).ToLowerInvariant() + entitySetName.Substring(1)));

很简单,您尚未设置变量length值,您可以这样做:

var length = 1;
var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, length-1).ToLowerInvariant() + entitySetName.Substring(1)));

现在应该编译的。

至于第一个示例:

var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, length:1).ToLowerInvariant() + entitySetName.Substring(1)));

应该按原样工作

希望这会有所帮助。

解决方案是使用类似字符串的长度属性:

var entitySetVar = EntitySetVariable ?? (String.IsNullOrEmpty(entitySetName) ? entitySetName : (entitySetName.Substring(0, entitySetName.Length-1).ToLowerInvariant() + entitySetName.Substring(1)));

相关内容

最新更新