我正在编写一个方法,旨在返回一个充满配置键和值的字典.构建这个字典的方法是动态的,所以我需要将这组键和值作为集合(可能IDictionary<string, string>)返回.在我的各种读物中(来源逃避了我),关于从方法调用返回集合类型的一般共识不是.
我理解这个政策的原因,我倾向于同意,但在这种情况下,我看不到其他选择.这是我的问题:有没有办法可以将这些数据返回给调用者,同时遵循这个原则?
编辑:我听到不允许这种行为的原因是,客户端要使用(但未修改)的集合或字典类型会暴露太多行为,从而产生调用者可以修改类型的错觉.例如,Dictionary具有Add和Remove方法,以及一个可变索引器.如果字典中的值是只读的,那么这些方法充其量是多余的.如果内部集合被暴露,则可以进一步造成损害,并且集合的"所有者"不会预期从外部来源对集合进行更改.
还有其他原因我听说过,但我无法回想起它们 - 这些是我的情况中最相关的.
编辑:更多说明:我遇到的问题是我正在构建一个API,所以我无法控制调用此函数的客户端.克隆字典不是问题,但我试图让我的API保持尽可能干净.使用"添加"和"删除"等方法返回字典意味着可以或应该修改集合,但实际情况并非如此.这里的修改是没有意义的,所以我不想通过返回类型的接口公开该功能的承诺.
解决方案:为了满足我对干净API的需求,我将编写一个自定义的Dictionary类,它不会公开变异方法Add和Remove,或者设置索引器.这种类型不会实现IDictionary,但我会编写一个方法ToDictionary来返回一个数据IDictionary.它将实现IEnumerable<KeyValuePair<TKey, TValue>>,以便访问可枚举的标准LINQ操作.现在我需要的是我的自定义词典类型的名称... =)谢谢大家.
我想创建一个静态帮助方法,我可以从视图中调用.
辅助方法是否可以访问当前的ViewContext而无需将ViewContext作为参数显式传递给方法?
类似于HttpContext.Current,除了ViewContext.
我在使用Uploadify时遇到了问题,希望有人可以提供帮助.我已将Uploadify放入我的应用程序,并且所有工作正常(使用VS Web服务器).一切正常并检查,直到我将应用程序部署到使用集成Windows身份验证的测试环境中.
当我实际上去上传文件时,浏览器会显示登录提示.此时,即使您输入正确的用户名和密码,该请求似乎也无法完成,即使您告诉浏览器记住密码,它仍然会显示登录提示.
当这种情况开始发生时,我决定旋转Fiddler,看看发生了什么.但是猜猜是什么,当Fiddler正在运行问题时不会发生.
不幸的是,我无法让运行Fiddler成为运行应用程序的必要条件.因此,任何人都有任何想法.我知道在使用表单身份验证时,Uploadify/flash存在一些问题,但我认为它们并未贯彻到集成Windows身份验证.
我读程序员修炼:从中级到主由安德鲁·亨特,大卫·托马斯.当我读到一个叫做正交性的术语时,我在想我正确的做法.我很了解它.然而,在本章的最后,提出了一些问题来衡量对该主题的理解程度.当我试图回答这些问题时,我意识到我并没有完全理解它.所以为了澄清我的理解,我在这里问这些问题.
C++支持多重继承,Java允许类实现多个接口.使用这些设施对正交性有何影响?使用多重继承和多个接口之间的影响是否存在差异?
我一直在寻找有关魔兽世界插件API的第一手信息。有几个不错的Wiki,但是它们的参考链接仅指向内部。当然,暴雪发布了一些有关该主题的信息。
是否可以从逆向工程和论坛中真正收集他们的所有信息?我很难相信这一点。
我需要加密 ASP.NET 页面使用的 C# 代码。所以,当我编译创建一个 DLL 文件时,我确实需要加密我的 DLL 文件。请帮我如何加密DLL文件...
我有一个Telerik Grid,它有一个需要显示列总和的页脚.但是,其中一个列的数据类型是TimeSpanTelerik的Sum聚合不支持的.我需要用来GridBoundColumnBuilder.Aggregate()添加聚合.所以我想基本上问题是如何在telerik的Aggregate()方法中引用我的自定义聚合.如果你发现其他任何我做错了,请随意指出:)使用这篇文章,我为我的自定义聚合创建了一个类SumAggregate,如下所示.(请注意,这还没有完成 - 它取自文章.它实际上实现了一个完全不同的聚合)
SumAggregate.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Telerik.Web.Mvc;
namespace TelerikPOC.CustomAggregates
{
public class SumAggregate : AggregateFunction
{
private System.Collections.Generic.List<object> distinctValues;
/// <summary>
/// Initializes the current aggregate function to its initial
/// state ready to accumulate and merge values.
/// </summary>
/// <remarks>
/// This method is called every time the accumulation of values
/// must start over for a new subset of …Run Code Online (Sandbox Code Playgroud) 我正在使用Twitter上的官方示例.主要问题,我可能不知道如何使用Hogan怪物.JS方面:
$("#search_name").typeahead({
name: 'name',
remote: {
url: '/entities/search_autocomplete.json?query=%QUERY',
template: '<p><strong>{{id}}</strong> – {{name}}</p>',
engine: Hogan
}
});
Run Code Online (Sandbox Code Playgroud)
服务器以JSON格式返回数据,结构为:
[{\"id\":1234,\"name\":\"Blah blah...\",\"tokens\":[\"blah...\",\"blah\"]}]
Run Code Online (Sandbox Code Playgroud) 下面两个字符串方法的区别是什么?
string str1 = dr["RAGStatusCID"].ToString();
string str2 = (string)dr["Description"];
Run Code Online (Sandbox Code Playgroud) 我想对C#字典中的每个对象做一些事情.keyVal.Value看起来有点尴尬:
foreach (KeyValuePair<int, Customer> keyVal in customers) {
DoSomething(keyVal.Value);
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点也快?
c# ×4
asp.net ×2
.net ×1
add-on ×1
aggregate ×1
asp.net-mvc ×1
browser ×1
collections ×1
conceptual ×1
dll ×1
dllexport ×1
encryption ×1
file-upload ×1
flash ×1
iis ×1
javascript ×1
lua ×1
lua-api ×1
orthogonal ×1
telerik ×1
telerik-grid ×1
typeahead ×1
uploadify ×1
viewcontext ×1