5

我想知道我应该如何测试简单的 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.
4

4 回答 4

11

交互式窗口(不要与即时窗口混淆)将实现您正在寻找的内容。

它可以通过 访问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] } } } }
于 2020-01-29T10:19:09.920 回答
3

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

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

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

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

于 2020-01-29T10:19:38.037 回答
0

我已经解决了您在 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);
    
    }
    

希望对你有帮助

于 2020-01-29T11:14:51.370 回答
0

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

LINQPad 截图

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

Try .NET 的代码编辑器截图

于 2020-01-30T12:20:02.930 回答