我正在阅读Bill Wagner的Effective C#.在第14项 - 最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例:
public MyClass(int initialCount = 0, string name = "")
请注意,他使用""而不是string.Empty.
他评论道:
您将注意到[在上面的示例中]第二个构造函数为name参数指定了默认值,而不是更常用的
string.Empty.那是因为string.Empty它不是编译时常量.它是字符串类中定义的静态属性.因为它不是编译常量,所以不能将它用作参数的默认值.
如果我们不能string.Empty在所有情况下使用静态,那么这不是打败了它的目的吗?我认为我们会用它来确保我们有一个独立于系统的方法来引用空字符串.我的理解错了吗?谢谢.
更新
只是后续评论.根据MSDN:
每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是常量.
然后我们无法使用它们System.Environment.NewLine,或者使用新实例化的对象作为默认值.我还没有用过VS2010,这太令人失望了!
我最近开始编写React Native代码,并且在使用我的Async/Await函数和Async/Await箭头函数使Chrome调试器或React Native调试器正常工作时遇到了巨大的困难.
我可以成功地将调试器连接到我的代码并逐步完成我的大部分代码,但似乎当调试器进入我的异步方法时,它会失去对实际执行的行的跟踪,从而无法高效地工作.
即使console.log语句指示代码已执行,一些断点也不会受到影响.发生这种情况时,通常当前的调试行将切换到函数声明的行而不是实际执行的行.
我使用了我的应用程序crna,并在Windows 10中运行.不确定这是否相关.
我看到很多关于2016年各种论坛中类似行为的讨论,但最近没有关于它的新闻,所以我认为它已经修复了.如果没有,那么解决方法是什么?我需要一种方法来调试我的代码.
google-chrome-devtools reactjs react-native create-react-app react-native-debugger
我试图在我的ASP.NET Core 2.0 web api中集成google身份验证,我无法弄清楚如何让它工作.
我在我的Startup.cs中有这个代码ConfigureServices:
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddDefaultTokenProviders();
services.AddAuthentication()
.AddGoogle(googleOptions =>
{
googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});
Run Code Online (Sandbox Code Playgroud)
这个在Configure(IApplicationBuilder app, IHostingEnvironment env):
app.UseAuthentication();
Run Code Online (Sandbox Code Playgroud)
当我导航到Authorized端点时,结果是302 Found因为它可能是重定向到某个登录端点(我从未创建过).如何阻止重定向,只是让API期望一个令牌,401如果没有提供令牌,则返回一个令牌?
google-api google-authentication oauth-2.0 asp.net-core asp.net-core-2.0
我有一个类似于以下的属性:
private:
Foo* myFoo_m;
public:
Foo getMyFoo() const
{
if (myFoo_m == NULL)
{
myFoo_m = new Foo();
// perform initialization
Run Code Online (Sandbox Code Playgroud)
这在单线程环境中运行良好,但如何在多线程环境中处理此问题?我发现的大部分信息都涉及静态单例,但在这种情况下,myFoo是一个公共实例属性.
我从C#(我可以使用Lazy)和Java(我可以使用双重检查锁定)移植它,但似乎没有一种直接的方法在C++中执行此操作.我不能依赖任何外部库(没有BOOST),这需要在Windows和Linux上运行.我也不能使用C++ 11.
任何见解都会很好.我是C++的新手.
假设我在变量$ mat中调用Select-String的结果,从文件内容中解析正则表达式:
$mat = cat errors.txt | Select-String "'(?<code>\w+)'.+ID (?<id>[^:]+)"
Run Code Online (Sandbox Code Playgroud)
根据$mat | Get-Member结果的输出包含类型的Matches属性Match[].
当我执行以下操作时,我获得了正则表达式输出的所有匹配:
PS > $mat | Select-Object -Property Matches
Matches
-------
{'ACCFWD', ID 16}
{'EQASIAN', ID 448}
Run Code Online (Sandbox Code Playgroud)
为什么下一个使用foreach选择匹配的代码块没有相同的输出:
PS > $mat | ForEach { $_.Matches }
Groups : {'ACCFWD', ID 16, ACCFWD, 16}
Success : True
Captures : {'ACCFWD', ID 16}
Index : 20
Length : 15
Value : 'ACCFWD', ID 16
Groups : {'EQASIAN', ID 448, EQASIAN, 448}
Success : True
Captures : …Run Code Online (Sandbox Code Playgroud) 如果我cancellationTokenSource.Cancel在与取消令牌相关联的任务内调用,OperationCancelledException则正确抛出,但是,task.IsCanceled并不总是更新并设置为true,如预期的那样.
使用以下nUnit测试可以快速证明该问题:
var cancellationTokenSource = new CancellationTokenSource();
Task task = Task.Factory.StartNew(() =>
{
cancellationTokenSource.Cancel();
cancellationTokenSource.Token.ThrowIfCancellationRequested();
},
cancellationTokenSource.Token);
try
{
task.Wait(cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
}
if (task.IsCanceled)
{
Assert.Pass();
}
else
{
Assert.Fail();
}
Run Code Online (Sandbox Code Playgroud)
当我运行此测试时,测试通过,但是,当我调试此测试(使用Resharper测试运行器)时,测试失败.
我不认为这与Resharper有任何关系,我认为Resharper可能正在创造一些可能在.Net中暴露问题的条件.或者,也许我只是在做一些完全错误的事情... 任何见解?
c# ×2
google-api ×2
asp.net-core ×1
azure ×1
c#-4.0 ×1
c++ ×1
google-oauth ×1
jwt ×1
lazy-loading ×1
oauth-2.0 ×1
postman ×1
powershell ×1
react-native ×1
reactjs ×1
regex ×1
resharper ×1