假设字典键和值的equals和hash方法正确实现,那么测试两个字典相等的最简洁有效的方法是什么?
在这种情况下,如果它们包含相同的一组键(顺序并不重要),则说两个字典是相等的.对于每个这样的键,它们都同意该值.
这里有一些我提出的方法(可能还有更多):
public bool Compare1<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey,TValue> dic2)
{
return dic1.OrderBy(x => x.Key).
SequenceEqual(dic2.OrderBy(x => x.Key));
}
public bool Compare2<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Count == dic2.Count &&
dic1.Intersect(dic2).Count().
Equals(dic1.Count));
}
public bool Compare3<TKey, TValue>(
Dictionary<TKey, TValue> dic1,
Dictionary<TKey, TValue> dic2)
{
return (dic1.Intersect(dic2).Count().
Equals(dic1.Union(dic2).Count()));
}
Run Code Online (Sandbox Code Playgroud) 在调用时Newtonsoft.Json.JsonConvert.SerializeObject(myObject)我得到的键和值用双引号括起来,如下所示:
{"key" : "value"}
我希望它们用这样的单引号括起来:
{'key' : 'value'}
是否可以使用Json .Net?
我正在尝试使用DataContractJsonSerializerWCF服务中的类层次结构序列化为Json字符串.序列化派生类的默认行为是将以下键值对添加到对象:
"__type":"ClassName:#Namespace"
我的问题是命名空间很长并且它们使Json字符串膨胀.我想以某种方式干预序列化并输出它:
"__type":"ClassName"
并且在反序列化时再次介入指向正确的命名空间(我在运行时知道).
有没有办法做这样的事情?
安装Azure SDK 2.5(与2.4和2.2并排)后,我无法在本地运行我的2.2项目.我收到以下错误:
Windows Azure工具:错误:安装的Microsoft Azure计算模拟器不支持角色二进制文件.请安装最新的Microsoft Azure Compute Emulator,然后重试.
看起来计算模拟器2.5取代了2.2而不是并排运行.
我试图安装2.2计算模拟器,但我得到了一个
已安装此产品的较新版本
有没有办法可以在同一台机器上运行2.5和2.2项目?
假设我正在缓存ChannelFactory<T>并使用它来创建频道.这些通道用于对其他服务进行WCF调用,然后(安全地)处理.
我是否需要担心缓存ChannelFactory出现故障并因此无法创建新频道的情况?如果是的话,我是否需要用新的替换它ChannelFactory?
对于ChannelFactory出现故障的情况,我还要感谢一个可重现的具体例子.
在异步编程模型中编写代码的主要目的之一(更具体地说 - 使用回调而不是阻塞线程)是为了最小化系统中阻塞线程的数量.
对于运行线程,由于上下文切换和同步成本,这个目标是显而易见的.
但是被阻止的线程呢?为什么减少它们的数量如此重要?
例如,在等待来自Web服务器的响应时,线程被阻塞,并且不占用任何CPU时间,并且不参与任何上下文切换.
所以我的问题是:除了RAM(每个线程大约1MB?)阻塞线程占用了哪些其他资源?
另一个更主观的问题是:在什么情况下,这个成本真的证明了编写异步代码的麻烦(例如,价格可能是将你的好的连贯方法拆分为大量的beginXXX和EndXXX方法,并将参数和局部变量移动到类字段).
更新 - 我没有提及或没有给予足够重视的其他原因:
更多线程意味着更多地锁定公共资源
更多线程意味着更多创建和处理线程,这是昂贵的
系统肯定会耗尽线程/ RAM然后停止服务客户端(在Web服务器方案中,这实际上可以降低服务)
假设我有一些APM(BeginXxx,EndXxx)模式异步方法(作为我正在调用的一些WCF服务代理的一部分):
public interface ISomeService
{
IAsyncResult BeginSomeMethod(int num, AsyncCallback callback, object state);
int EndSomeMethod(IAsyncResult ar);
}
Run Code Online (Sandbox Code Playgroud)
我的实际代码使用了Task.Factory.FromAsync创建一个Task,然后使用.net 4.5中引入的新的async/await模式等待这个任务.
我想测试我的类,因此我需要编写一个接收mock,begin方法,end方法和返回值的方法,并设置mock以便最终返回所需的返回值.
示例用法:
SetupAsync(mock, mocked => mocked.BeginSomeMethod, mocked=> mocked.EndSomeMethod, 7);
Run Code Online (Sandbox Code Playgroud)
这将导致异步流与任何int参数返回7.我似乎无法弄清楚如何在moq中完成这样的事情.
Model,View或Controller是否应该知道页面标题?
选项1
使用模型存储页面标题(这使模型更像是一个视图模型):
public class SomeModel
{
string Title { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后视图可以简单地相应地设置标题
<title>@Model.Title</title>
Run Code Online (Sandbox Code Playgroud)
选项2
该视图知道自己的标题:
@{
ViewBag.Title = "Some Title";
}
Run Code Online (Sandbox Code Playgroud)
在视图中的某个位置或正在使用的默认布局:
<title>@ViewBag.Title</title>
Run Code Online (Sandbox Code Playgroud)
选项3
从控制器设置标题
ViewBag.Title = "Some Title"
Run Code Online (Sandbox Code Playgroud)
然后从视图中使用它
<title>@ViewBag.Title</title>
Run Code Online (Sandbox Code Playgroud)
哪种方法最好(假设我有不同页面的通用布局)?
我想在用户离开我的页面之前保存到 IndexedDB。我定期这样做,但由于它很大,我不想经常保存。
我当前的(损坏的)代码如下:
window.addEventListener('beforeunload', (event) => {
persist(state);
});
Run Code Online (Sandbox Code Playgroud)
在这里,persist 立即返回一个承诺,并且在我有机会保存状态之前浏览器已经存在。
不幸的是,此时 IndexedDB 似乎没有同步 API。
有什么我可以做的让浏览器等待以便我可以将值存储到 IndexedDB 中吗?
从电子应用程序获取 AAD 令牌的最佳方式是什么?
Microsoft 有 2 个 javascript 身份验证库:adal.js和msal.js. 两者都是为浏览器而不是本机Electron应用程序设计的(例如 - AAD 不允许使用file:///方案作为回复 URL)。
听起来长期解决方案是原生 AAD 包(例如 Microsoft 为Apache Cordova构建的包),但由于这可能不会很快发生,那么最好的短期选择是什么?
c# ×8
wcf ×3
asynchronous ×2
json ×2
.net ×1
adal ×1
asp.net-mvc ×1
async-await ×1
azure ×1
dictionary ×1
electron ×1
equality ×1
indexeddb ×1
javascript ×1
json.net ×1
moq ×1
promise ×1
razor ×1
wcf-client ×1