【问题标题】:Test simple c# code expressions in Visual Studio在 Visual Studio 中测试简单的 C# 代码表达式
【发布时间】:2020-05-14 19:27:04
【问题描述】:

我想知道如何测试简单的 C# 表达式

1) 在 Visual Studio 中和
2) 不在调试中,在设计模式中

说,我想验证什么会返回此代码

?DateTime.ParseExact("2016", "yyyy")

或者

int i;
int.TryParse("x55", out i);
?i

我在即时窗口中获得了以下消息:

?DateTime.ParseExact("2016", "yyyy") 
The expression cannot be evaluated while in design mode.

【问题讨论】:

  • @PavelAnikhouski 看到我的评论
  • 立即用于调试期间。您需要查看-->其他窗口-->命令窗口。
  • Interactive Window 应该可以满足您的需求 - View > Other Windows > C# Interactive
  • @Serge 我做到了,我说的是交互式,而不是立即
  • 不是您所问问题的真正答案,但我强烈建议您尝试LinqPad

标签: c# .net visual-studio visual-studio-2019 code-testing


【解决方案1】:

Interactive Window(不要与即时窗口混淆)将实现您所寻找的。

它可以通过View > Other Windows > C# Interactive 访问,本质上是一个交互式编译器会话,它独立于项目是否正在执行而运行,允许您任意执行代码,而无需构建和运行您的项目。

这是一个可以在此窗口中执行的操作的示例

> Random gen = new Random();
> DateTime RandomDay()
. {
.     int monthsBack = 1;
.     int monthsForward = 3;
.     DateTime startDate = DateTime.Now.AddMonths(-monthsBack);
.     DateTime endDate = DateTime.Now.AddMonths(monthsForward);    
.     int range = (endDate - startDate).Days;
.     return startDate.AddDays(gen.Next(range));
. }
> RandomDay()
[28/01/2020 15:11:51]

并且还使用外部 dll

> Newtonsoft.Json.Linq.JObject.Parse("{'myArticle': { 'myDate': '2020-03-24T00:00:00'}  }")
(1,1): error CS0103: The name 'Newtonsoft' does not exist in the current context

> #r "C:\Users\MyUser\.nuget\packages\newtonsoft.json\11.0.2\lib\netstandard2.0\Newtonsoft.Json.dll"

> Newtonsoft.Json.Linq.JObject.Parse("{'myArticle': { 'myDate': '2020-03-24T00:00:00'}  }")
JObject(1) { JProperty(1) { JObject(3) { JProperty(1) { [24/03/2020 00:00:00] } } } }

【讨论】:

  • 会补充一点,有一种方法可以通过> #r "C:\Users\myUser\.nuget\packages\newtonsoft.json\...Newtonsoft.Json.dll"在该工具中添加缺少的 dll 引用
  • ... 添加以回答该信息
  • 很好,我不知道它可以做到这一点!
【解决方案2】:

即时窗口在设计模式下将不起作用。您需要使用构建在 Roslyn 之上的“C# 交互式窗口”,因此安装 Roslyn 然后按照下面的 Wiki 进行操作

https://github.com/dotnet/roslyn/wiki/Interactive-Window

通过以下菜单路径打开的 C# 交互窗口:

视图 > 其他窗口 > C# 交互

【讨论】:

    【解决方案3】:

    我已经解决了您在 Visual Studio 2019 上的问题,

    1. 首先我使用 nuget 包管理器安装 Microsoft.AspNetCore.Mvc.Newtonsoft.json。

    2. 第二次使用静态非泛型类中定义的这个方法来转储你想要验证的任何表达式。

        public static void DumpObject(this object value)    
        {
      
         Console.WriteLine(JsonConvert.SerializeObject(value, Formatting.Indented));  
      
        }
      

    注意:记得使用 Newtonsoft.Json 添加;

    1. 最终形成 Main 方法调用 Class.YourDumpMethod(AnyObjToVerify); 如下:

      static void Main()
      
      {
      
       DateTime dt = DateTime.ParseExact("2016","yyyy", null, DateTimeStyles.None);
      
       Dump.DumpObject(dt);
      
       int i;
      
       bool b = int.TryParse("55", out i);
      
       Dump.DumpObject(i);
      
      }
      

    希望对你有帮助

    【讨论】:

      【解决方案4】:

      您可以为此使用外部应用程序,例如LINQPad

      或者Try .NET中的Jupyter笔记本:

      【讨论】:

      • 谢谢你的回答,但在第一点“在 Visual Studio”中提到的 OP
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 2022-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2019-08-20
      相关资源
      最近更新 更多