在与Microsoft员工进行代码审查期间,我们在try{}块中遇到了大量代码.她和IT代表建议这可能会影响代码的性能.事实上,他们建议大多数代码应该在try/catch块之外,并且只应该检查重要的部分.微软员工补充说,即将发布的白皮书警告不要使用不正确的try/catch块.
我环顾四周,发现它可以影响优化,但它似乎只适用于范围之间共享变量.
我不是在询问代码的可维护性,甚至不是在处理正确的异常(有问题的代码需要重新分解,毫无疑问).我也没有提到使用流量控制的异常,这在大多数情况下显然是错误的.这些都是重要的问题(有些更重要),但不是重点.
如果不抛出异常,try/catch块如何影响性能?
作为GitHub上Roslyn文档的一部分,有一个名为语言功能实现状态的页面,具有C#和VB的计划语言功能.
我无法理解的一个功能是private protected访问修饰符:
private protected string GetId() { … }
Run Code Online (Sandbox Code Playgroud)
还有一个C#语言设计笔记页面,它解释了许多新功能,但不是这个.
Eric Lippert在评论中说:
您的错误在于将修饰符视为增加限制.实际上,修饰符总是减少限制.请记住,默认情况下,事物是"私人的"; 只有通过添加修饰符才能减少限制.
是什么意思private protected?我什么时候可以使用它?
假设我有一个连接到.Net API的Android应用程序,用于接收/设置数据.我所遇到的困惑是关于如何在每次向API发出请求时第一次注册/登录用户并对其进行身份验证.
还有哪些其他模式可用,哪些模式最有效和最安全,我只需要一个流程.有人能告诉我Facebook,FourSquare或Twitter等着名的Android应用程序使用什么方法来验证从他们的移动应用程序到他们的服务器的每个请求?
如果这不是一些公开信息,请提前抱歉.
我发现这个代码使用XOR ^运算符交换两个数字而不使用第三个变量.
码:
int i = 25;
int j = 36;
j ^= i;
i ^= j;
j ^= i;
Console.WriteLine("i:" + i + " j:" + j);
//numbers Swapped correctly
//Output: i:36 j:25
Run Code Online (Sandbox Code Playgroud)
现在我将上面的代码更改为此等效代码.
我的代码:
int i = 25;
int j = 36;
j ^= i ^= j ^= i; // I have changed to this equivalent (???).
Console.WriteLine("i:" + i + " j:" + j);
//Not Swapped correctly
//Output: i:36 j:0
Run Code Online (Sandbox Code Playgroud)
现在,我想知道,为什么我的代码输出不正确?
我研究了性能下降并将其跟踪以减缓HashSets的速度.
我有可用值作为主键的结构.例如:
public struct NullableLongWrapper
{
private readonly long? _value;
public NullableLongWrapper(long? value)
{
_value = value;
}
}
Run Code Online (Sandbox Code Playgroud)
我注意到创建一个HashSet<NullableLongWrapper>异常缓慢.
以下是使用BenchmarkDotNet的示例:( Install-Package BenchmarkDotNet)
using System.Collections.Generic;
using System.Linq;
using BenchmarkDotNet.Attributes;
using BenchmarkDotNet.Configs;
using BenchmarkDotNet.Jobs;
using BenchmarkDotNet.Running;
public class Program
{
static void Main()
{
BenchmarkRunner.Run<HashSets>();
}
}
public class Config : ManualConfig
{
public Config()
{
Add(Job.Dry.WithWarmupCount(1).WithLaunchCount(3).WithTargetCount(20));
}
}
public struct NullableLongWrapper
{
private readonly long? _value;
public NullableLongWrapper(long? value)
{
_value = value;
}
public …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过postMessage函数将对象传递给Web worker.
这个对象是一个正方形,有一些功能可以在画布上绘制自己和其他一些东西.Web worker必须返回此对象的数组.
问题是当我用这个对象调用postMessage函数时,我收到一个错误:
Uncaught Error: DATA_CLONE_ERR: DOM Exception 25
Run Code Online (Sandbox Code Playgroud)
我得到这个将对象发送给工人,反之亦然.
我认为错误是因为javascript必须序列化对象,但不能这样做因为对象具有内置函数.
有没有人遇到过类似的问题?你知道这方面的一些工作吗?
提前致谢.
我想知道的区别str == NULL和str[0] == '\0':
int convert_to_float(char *str, double *num)
{
if ((str == NULL) || (str[0] == '\0'))
return(-1);
*num = strtod(str, (char **)NULL);
return(0);
}
Run Code Online (Sandbox Code Playgroud)
我在Linux上使用gcc.
说我有清单
const list = ['a', 'b', 'c']
是不是可以从这个值的联合类型派生出来的'a' | 'b' | 'c'?
我想要这个,因为我想定义只允许来自静态数组的值的类型.而且我还需要在运行时枚举这些值,所以我使用数组.
示例如何使用索引对象实现:
const list = ['a', 'b', 'c']
'a' | 'b' | 'c'
const list = ['a', 'b', 'c']
但我想知道没有这个索引地图是否可行.
考虑两种扩展方法:
public static T MyExtension<T>(this T o) where T:class
public static T MyExtension<T>(this T o) where T:struct
Run Code Online (Sandbox Code Playgroud)
一节课:
class MyClass() { ... }
Run Code Online (Sandbox Code Playgroud)
现在在上面的类的实例上调用extension方法:
var o = new MyClass(...);
o.MyExtension(); //compiler error here..
o.MyExtension<MyClass>(); //tried this as well - still compiler error..
Run Code Online (Sandbox Code Playgroud)
编译器说当我在类上调用它时调用该方法是一个模糊的调用.我原以为它可以确定调用哪个扩展方法,因为MyClass是一个类,而不是一个结构体?
c# ×5
.net ×2
javascript ×2
performance ×2
android ×1
c ×1
c#-6.0 ×1
c#-7.2 ×1
cstring ×1
facebook ×1
foursquare ×1
gcc ×1
generics ×1
pointers ×1
raven ×1
sentry ×1
source-maps ×1
struct ×1
swap ×1
try-catch ×1
typescript ×1
uglifyjs ×1
web-worker ×1
xor ×1