.net 什么';这些VB实现有什么不同?

.net 什么';这些VB实现有什么不同?,.net,vb.net,exception,.net,Vb.net,Exception,实现目标: 我想在列表中每个成员的末尾添加上一个月的名称 我有两个相同的实现,一个正在工作,但另一个给出了异常 工作代码: prevMonthSheetNames = addMonth(monthlySheetNames, prevMonth) Private Function addMonth(ByVal list As IEnumerable(Of String), ByVal month As String) As List(Of String) Return list.Sele

实现目标: 我想在列表中每个成员的末尾添加上一个月的名称

我有两个相同的实现,一个正在工作,但另一个给出了异常

工作代码:

prevMonthSheetNames = addMonth(monthlySheetNames, prevMonth)

Private Function addMonth(ByVal list As IEnumerable(Of String), ByVal month As String) As List(Of String)
    Return list.Select(Function(name) String.Concat(name) + " (" + month + ")").ToList()
End Function
例外情况下的实施:

prevMonthSheetNames = monthlySheetNames.Select(Function(name) String.Concat(name) + " (" + prevMonth + ")").ToList()
错误:“System.Collections.Generic.List(对象)”类型的值无法转换为“System.Collections.Generic.List(字符串)”类型

如果从上面删除.ToList(),则:

异常:无法将类型为“WhereSelectListIterator
2[System.String,System.object]”的对象强制转换为类型为“System.Collections.Generic.List
1[System.String]”

请帮助,发生了什么-看起来是一样的,但1给出了错误,而另一个没有

月度SheetNames的声明

Private monthlySheetNames As New List(Of String)(New String() {"Salary", "Budget", "Loans"}) 

该问题可能与使用“+”运算符有关。在VB.Net中,应该使用“&”进行连接。此外,String.Concat函数的使用是多余的——它不会产生任何效果。试试这个

Option Explicit On
Option Strict On

prevMonthSheetNames = monthlySheetNames.Select(Function(name) name & " (" & prevMonth & ")").ToList()

我不确定这两个版本之间的区别是什么。但可能是由于参数值的隐式转换。我在代码示例中包含了一些语句,这些语句将确保同时启用Option Strict和Option Explicit。这可能有助于发现此类问题。

该问题可能与使用“+”运算符有关。在VB.Net中,应该使用“&”进行连接。此外,String.Concat函数的使用是多余的——它不会产生任何效果。试试这个

Option Explicit On
Option Strict On

prevMonthSheetNames = monthlySheetNames.Select(Function(name) name & " (" & prevMonth & ")").ToList()
我不确定这两个版本之间的区别是什么。但可能是由于参数值的隐式转换。我在代码示例中包含了一些语句,这些语句将确保同时启用Option Strict和Option Explicit。这可能有助于解决此类问题。

试试这个

Public Function GetSheetNamesForMonth(byval sheetNames As IEnumerable(Of String), Byval monthName As String) As IEnumerable(Of String)
    Return sheetNames.Select(Function(n) String.Format("{0}({1})", n, monthName))
End Function
试试这个

Public Function GetSheetNamesForMonth(byval sheetNames As IEnumerable(Of String), Byval monthName As String) As IEnumerable(Of String)
    Return sheetNames.Select(Function(n) String.Format("{0}({1})", n, monthName))
End Function

在第二个示例中,匿名函数返回的是
对象
,而不是
字符串
,因此转换失败

首先,转到项目属性,确保在项目属性编译选项卡上处于打开状态

然后,仔细查看上个月的声明。
如何分配它?它是什么类型的?您确定它是一个
字符串吗

它还可以帮助处理以确保返回
字符串。对,有点乱:

Function(name) String.Concat(name) + " (" + prevMonth + ")"
String.Concat
连接它的参数,您只给它一个。这个电话没用。
另外,如果
prevMonth
不是真正的
字符串
,我不确定VB.NET将如何应用
+
操作符

毕竟,使用
String.Format
更简单(更安全):


至少,您可以确定它确实返回了一个
字符串

在第二个示例中,匿名函数返回的是一个
对象
,而不是
字符串
,因此转换失败

首先,转到项目属性,确保在项目属性编译选项卡上处于打开状态

然后,仔细查看上个月的声明。
如何分配它?它是什么类型的?您确定它是一个
字符串吗

它还可以帮助处理以确保返回
字符串。对,有点乱:

Function(name) String.Concat(name) + " (" + prevMonth + ")"
String.Concat
连接它的参数,您只给它一个。这个电话没用。
另外,如果
prevMonth
不是真正的
字符串
,我不确定VB.NET将如何应用
+
操作符

毕竟,使用
String.Format
更简单(更安全):



至少,您可以确定它确实返回了一个
字符串

,您是否可以包括每月sheetnames的声明。您的代码中是否启用了“显式/严格”选项?好的。。。我要补充一点!选项显式/严格-我不知道如何使用此选项。所以,我没有使用这个,它必须是默认的。你的代码的最终目标是什么?现在有点乱,如果你告诉我们你想要什么,我们也许能更好地破译它。我只想在名单的每个成员的末尾加上一个月的名字。你能把每月的申报单包括进去吗。您的代码中是否启用了“显式/严格”选项?好的。。。我要补充一点!选项显式/严格-我不知道如何使用此选项。所以,我没有使用这个,它必须是默认的。你的代码的最终目标是什么?现在有点乱,如果你告诉我们你想要什么,我们也许能更好地破译它。我只想在名单的每个成员的末尾加上这个月的名字。不,这没有帮助。。对于
.ToList()
,它给出了问题中的错误。另外,使用
&
和删除
字符串.Concat也没有帮助。事情还是一样!我添加了选项显式和严格的语句。你能试试这些吗?不,没用。。对于
.ToList()
,它给出了问题中的错误。另外,使用
&
和删除
字符串.Concat也没有帮助。事情还是一样!我添加了选项显式和严格的语句。你能试试这些吗?我想用第二种方法来做,但它不起作用,没有函数。@Yugal-如果你不想要函数,请删除单词“
Return
”后面的所有内容,并根据需要重命名变量。i、 e.
prevMonthSheetNames=monthlySheetNames.Select(函数(n)String.Format(“{0}({1})”,n,prevMonthName))
/它做同样的事情,不管是在函数中还是在函数中……我想用第二种不起作用的方法来做,但没有函数。@Yugal-如果你不想要函数,请删除单词后面的所有内容“
返回
”并将变量重命名为