我知道从MSDN的文章有关如何修改表达式树什么的ExpressionVisitor
是应该做的.它应该修改表达式.
然而,他们的例子非常不现实,所以我想知道为什么我需要它?你能说出一些真实世界的案例吗?修改表达式树会有意义吗?或者,为什么必须进行修改?从什么到什么?
它还有许多重载用于访问各种表达式.我如何知道何时应该使用它们以及它们应该返回什么?另一方面,我看到人们使用VisitParameter
并返回base.VisitParameter(node)
另一方正在返回Expression.Parameter(..)
.
每个人都在写关于新类型有多棒,Span<T>
所以我急切地想在我的库中重写几种方法,但实际上我在哪里找到它?我已将Visual Studio 2017更新到最新版本15.5.0,其中change-log表示:
C#编译器现在支持7.2组语言功能,包括:
Span<T>
通过ref struct修饰符支持整个Kestrel和CoreFX中使用的类型.
但是当我尝试使用它时我的代码我收到错误而智能感知无法解决它.这是一个.net 4.6.2项目,语言版本设置为最新的次要版本.
我是否需要安装一些NuGet包才能使用它?我无法弄清楚这一点.
究竟什么是MSTest.TestAdapter
vs MSTest.TestFramework
和我何时需要哪一个?
在NuGet描述中,您可以阅读:
MSTest.TestAdapter
用于发现和执行基于MSTest Framework的测试的适配器.
MSTest.TestFramework
这是MSTest V2,微软测试框架的演变.+要发现并执行测试,请安装MSTest.TestAdapter.
嗯,不是很有帮助,我总是安装两个,因为我不知道应该采取哪一个.奇怪的是,在我的一个测试项目中,我只有MSTest.TestFramework
(我猜不出意料)并且ReSharper仍然可以发现测试.
我对这些包的问题是:
TestAdapter
?TestFramework
怎么办?我什么时候需要这个?GitHub上的项目页面也有很大帮助.唯一的环节
您可以在此处阅读有关MSTest V2的更多信息.
导航到一个页面,该页面仅说明它有多么伟大和开源,但没有任何具体的任何一个包.
我有以下目录树:
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)
但它不起作用.
我理解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()
方法.
我有一个IFoo
服务实现DefaultFoo
,我已经在我的autofac容器中注册了它.
现在我想允许IFoo
在插件程序集中实现的替代实现,可以将其放在"plugins"文件夹中.如果存在,如何配置autofac以优先选择此替代实现?
我正在开发一个应用程序,使用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控制台中查看设置吗?
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) 使用 Autofac,创建容器的子范围并注册附加服务非常容易。我如何通过 .net 的依赖注入实现相同的目标?
我IServiceProvider
尝试注入到需要创建子容器的类中,仅提供了CreateScope()
创建IServiceScope
agian 的方法,该方法仅具有该ServiceProvider
属性,而无法注册其他服务。我还应该注入其他什么东西来允许我向容器注册更多服务吗?
这是我的问题:我有一个容器,我将具体类型注册为接口.
builder.RegisterType<DeleteOrganization>().As<IDeleteOrganization>();
Run Code Online (Sandbox Code Playgroud)
我正在实现一个SerializationBinder
我正在进行的序列化项目BindToType
,我需要实现的方法要求我返回一个Type
对象.该BindToType
方法为我提供了一个assemblyName
和typeName
(两个字符串)来帮助我创建一个类型对象.我想要做的是如果它typeName
是一个接口,我想问Autofac Type
该接口的具体实现是什么,Type
而不实际创建该对象.那可能吗?
c# ×8
.net ×2
autofac ×2
.net-6.0 ×1
c#-7.2 ×1
google-api ×1
java ×1
mstest ×1
oauth-2.0 ×1
powershell ×1
resharper ×1
unit-testing ×1