为了账号安全,请及时绑定邮箱和手机立即绑定

VS2019 IDE 和命令行编译器在 C# 语句上存在分歧

VS2019 IDE 和命令行编译器在 C# 语句上存在分歧

C#
一只名叫tom的猫 2023-09-16 17:01:47
所以在 IDE 中我有以下内容:    public static void ConnectToOperaObjects(ref Microsoft.ClearScript.Windows.JScriptEngine jSE)    {        foreach (Tuple<string, object> tso in new List<Tuple<string, object>>() {            (name: "CSOperaDriver", type: typeof(OpenQA.Selenium.Opera.OperaDriver)),            (name: "CSOperaDriverService", type: typeof(OpenQA.Selenium.Opera.OperaDriverService)),            (name: "CSOperaOptions", type: typeof(OpenQA.Selenium.Opera.OperaOptions)) })        {            jSE.AddHostType(tso.name, tso.type);        }    }IDE 毫无疑问地编译它。命令行编译器抱怨Objects.cs(161,17): error CS1950: The best overloaded Add method 'List<Tuple<string, object>>.Add(Tuple<string, object>)' for the collection initializer has some invalid arguments [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]Objects.cs(161,17): error CS1503: Argument 1: cannot convert from '(string, System.Type)' to 'Tuple<string, object>' [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]Objects.cs(162,17): error CS1950: The best overloaded Add method 'List<Tuple<string, object>>.Add(Tuple<string, object>)' for the collection initializer has some invalid arguments [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]Objects.cs(162,17): error CS1503: Argument 1: cannot convert from '(string, System.Type)' to 'Tuple<string, object>' [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]Objects.cs(163,17): error CS1950: The best overloaded Add method 'List<Tuple<string, object>>.Add(Tuple<string, object>)' for the collection initializer has some invalid arguments [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]Objects.cs(163,17): error CS1503: Argument 1: cannot convert from '(string, System.Type)' to 'Tuple<string, object>' [C:\Users\bugma\Source\Repos\RR\RR\RR.csproj]命令行工具被调用为"C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\amd64\MSBuild.exe" %* /t:Build以 RR 的csproj文件作为参数。我尝试向其提供文件sln,但没有效果。解决办法是什么?
查看完整描述

2 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我会将您的命名更改Tuple为以下命名 ValueTupleC# 7 语法,它应该可以工作:


var list = new List<(string name, object type)>()

          {

             (name: "CSOperaDriver", type: typeof(OpenQA.Selenium.Opera.OperaDriver))

             ...

          };


foreach (var tso in list)

   ...

或者像这样改变你的初始化器


new Tuple<string, object>( "CSOperaDriver",  typeof(OpenQA.Selenium.Opera.OperaDriver))),

查看完整回答
反对 回复 2023-09-16
?
FFIVE

TA贡献1797条经验 获得超6个赞

该类型不喜欢成为一个对象,并坚持成为一个System.Type。


    public static void ConnectToOperaObjects(ref Microsoft.ClearScript.Windows.JScriptEngine jSE)

    {

        foreach (var tso in new List<(string name, System.Type type)>() {

            ("CSOperaDriver", typeof(OpenQA.Selenium.Opera.OperaDriver)),

            ("CSOperaDriverService", typeof(OpenQA.Selenium.Opera.OperaDriverService)),

            ("CSOperaOptions", typeof(OpenQA.Selenium.Opera.OperaOptions)) })

        {

            AddHostType(ref jSE, tso.name, tso.type);

        }

    }

还有另一种选择,即将 foreach 子句更改为


foreach (var tso in new[] {

这会创建一个隐式数组并鼓励编译器找出元素是什么。


查看完整回答
反对 回复 2023-09-16
  • 2 回答
  • 0 关注
  • 93 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信