小编t3c*_*b0t的帖子

我为什么要使用ExpressionVisitor?

我知道从MSDN的文章有关如何修改表达式树什么的ExpressionVisitor是应该做的.它应该修改表达式.

然而,他们的例子非常不现实,所以我想知道为什么我需要它?你能说出一些真实世界的案例吗?修改表达式树会有意义吗?或者,为什么必须进行修改?从什么到什么?

它还有许多重载用于访问各种表达式.我如何知道何时应该使用它们以及它们应该返回什么?另一方面,我看到人们使用VisitParameter并返回base.VisitParameter(node)另一方正在返回Expression.Parameter(..).

c# expression-trees expressionvisitor

20
推荐指数
3
解决办法
5971
查看次数

我在哪里可以找到新的Span <T>?

每个人都在写关于新类型有多棒,Span<T>所以我急切地想在我的库中重写几种方法,但实际上我在哪里找到它?我已将Visual Studio 2017更新到最新版本15.5.0,其中change-log表示:

C#编译器现在支持7.2组语言功能,包括:

  • Span<T>通过ref struct修饰符支持整个Kestrel和CoreFX中使用的类型.

但是当我尝试使用它时我的代码我收到错误而智能感知无法解决它.这是一个.net 4.6.2项目,语言版本设置为最新的次要版本.

我是否需要安装一些NuGet包才能使用它?我无法弄清楚这一点.

c# c#-7.2

19
推荐指数
2
解决办法
4357
查看次数

MSTest.TestAdapter与MSTest.TestFramework有什么区别?我什么时候需要哪一个?

究竟什么是MSTest.TestAdaptervs MSTest.TestFramework和我何时需要哪一个?

在NuGet描述中,您可以阅读:

MSTest.TestAdapter

用于发现和执行基于MSTest Framework的测试的适配器.

MSTest.TestFramework

这是MSTest V2,微软测试框架的演变.+要发现并执行测试,请安装MSTest.TestAdapter.


嗯,不是很有帮助,我总是安装两个,因为我不知道应该采取哪一个.奇怪的是,在我的一个测试项目中,我只有MSTest.TestFramework(我猜不出意料)并且ReSharper仍然可以发现测试.

我对这些包的问题是:

  • 你真的总是需要安装它们吗?
  • 为什么即使没有TestAdapter
  • 我该TestFramework怎么办?我什么时候需要这个?

GitHub上的项目页面也有很大帮助.唯一的环节

您可以在此处阅读有关MSTest V2的更多信息.

导航到一个页面,该页面仅说明它有多么伟大和开源,但没有任何具体的任何一个包.

.net c# unit-testing mstest visual-studio-2017

17
推荐指数
3
解决办法
6459
查看次数

如何使用相对路径调用另一个PowerShell脚本?

我有以下目录树:

e:\powershell\services\This-Script-Here-Should-Call-Press any key to continue.ps1
e:\powershell\utils\Press any key to continue.ps1
Run Code Online (Sandbox Code Playgroud)

现在我想调用一个名为"按任意键继续.ps1"的脚本,它位于"utils"文件夹中,来自我在"services"文件夹中的脚本.我怎么做?我无法弄清楚相对路径.

我试着这样做:

"$ '.\..\utils\Press any key to continue.ps1'"
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

powershell relative-path

16
推荐指数
3
解决办法
7万
查看次数

传递ExceptionDispatchInfo而不仅仅是Exception有什么意义?

我理解ExceptionDispatchInfo.Capture(e).Throw()(保留原始堆栈跟踪)的价值,但是Capture早期使用并传递ExceptionDispatchInfo周围与仅仅传递被捕获的优势是什么Exception

作为一个具体的例子,比较

static Exception CaptureException(Action action)
{
  try
  {
    action();
    return null;
  }
  catch (Exception e)
  {
    return e;
  }
}

public void Test1()
{
  ExceptionDispatchInfo.Capture(CaptureException(
       () => throw new IOException("Test")))
    .Throw();
}
Run Code Online (Sandbox Code Playgroud)

static ExceptionDispatchInfo CaptureDispatchInfo(Action action)
{
  try
  {
    action();
    return null;
  }
  catch (Exception e)
  {
    return ExceptionDispatchInfo.Capture(e);
  }
}

public void Test2()
{
  CaptureDispatchInfo(() => throw new IOException("Test")).Throw();
}
Run Code Online (Sandbox Code Playgroud)

,两者都给出了基本相同的堆栈跟踪(它的async变体类似于此.).所以,我真的不明白为什么这个ExceptionDispatchInfo类存在,而不仅仅是一个组合ExceptionDispatchInfo.Capture(e).Throw()方法.

.net c# exception-handling

16
推荐指数
2
解决办法
1922
查看次数

使用插件覆盖autofac注册

我有一个IFoo服务实现DefaultFoo,我已经在我的autofac容器中注册了它.

现在我想允许IFoo在插件程序集中实现的替代实现,可以将其放在"plugins"文件夹中.如果存在,如何配置autofac以优先选择此替代实现?

c# dependency-injection autofac

15
推荐指数
1
解决办法
5666
查看次数

如何获取脱机令牌和刷新令牌以及自动刷新对Google API的访问权限

我正在开发一个应用程序,使用OAuth2和谷歌客户端库(在Appengine和GWT BTW上)访问Google API(从Calendar API开始).

我已经实现了我的OAuth2Call后端servlet,扩展了Google AbstractAppEngineAuthorizationCodeCallbackServlet.

我有它的工作,我可以访问,可以查看日历等,但有两个问题:

1)尽管明确请求离线访问,但我没有获得刷新令牌:

public static GoogleAuthorizationCodeFlow newFlow( String scope ) throws IOException {
    GoogleAuthorizationCodeFlow.Builder builder = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, 
            JSON_FACTORY,
            getClientSecrets(), 
            Collections.singleton( scope ) );

    builder.setCredentialStore( new AppEngineCredentialStore() ).setAccessType("offline");

    return builder.build();
}
Run Code Online (Sandbox Code Playgroud)

2)我看不到如何设置自动刷新功能.这些页面描述了这些方法:

但是我看不到在哪里添加刷新监听器.与GoogleAuthorizationCodeFlow.Builder课程不同,Credential.Builder课堂上没有这样的方法

编辑在更多地调试代码之后,当凭证返回时(在onSuccess()方法中)它似乎已经有一个RefreshListener集合.....所以也许这是他们的默认情况,而我唯一的问题是我没有得到refresh_token,尽管问为了它.

可能还需要在Google API控制台中查看设置吗?

java google-app-engine google-api oauth-2.0

14
推荐指数
2
解决办法
2万
查看次数

我可以教ReSharper定制的空检查吗?

ReSharper很聪明,知道a string.Format需要一个非null format参数,所以当我简单地写时它就会警告我

_message = string.Format(messageFormat, args);
Run Code Online (Sandbox Code Playgroud)

哪里messageFormat确实可以为空.只要我为此变量添加条件:

if (!string.IsNullOrEmpty(messageFormat))
{
    _message = string.Format(messageFormat, args);
}
Run Code Online (Sandbox Code Playgroud)

警告消失了.不幸的是,当我使用扩展方法时它不会:

if (messageFormat.IsNotNullOrEmpty())
{
    _message = string.Format(messageFormat, args); // possible 'null' assignment warning
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有办法 ReSharper我的扩展方法具有相同的含义!string.IsNullOrEmpty(messageFormat)

扩展名定义为:

public static bool IsNotNullOrEmpty([CanBeNull] this string value) => !IsNullOrEmpty(value);
Run Code Online (Sandbox Code Playgroud)

c# resharper

13
推荐指数
1
解决办法
715
查看次数

使用附加服务创建子范围

使用 Autofac,创建容器的子范围并注册附加服务非常容易。我如何通过 .net 的依赖注入实现相同的目标?

IServiceProvider尝试注入到需要创建子容器的类中,仅提供了CreateScope()创建IServiceScopeagian 的方法,该方法仅具有该ServiceProvider属性,而无法注册其他服务。我还应该注入其他什么东西来允许我向容器注册更多服务吗?

c# dependency-injection .net-6.0

9
推荐指数
1
解决办法
2469
查看次数

无需创建对象即可解析类型

这是我的问题:我有一个容器,我将具体类型注册为接口.

builder.RegisterType<DeleteOrganization>().As<IDeleteOrganization>();
Run Code Online (Sandbox Code Playgroud)

我正在实现一个SerializationBinder我正在进行的序列化项目BindToType,我需要实现的方法要求我返回一个Type对象.该BindToType方法为我提供了一个assemblyNametypeName(两个字符串)来帮助我创建一个类型对象.我想要做的是如果它typeName是一个接口,我想问Autofac Type该接口的具体实现是什么,Type而不实际创建该对象.那可能吗?

c# autofac

8
推荐指数
1
解决办法
1687
查看次数