小编Kyl*_*man的帖子

如果您不应该将集合返回给调用者,那么如何将一组数据返回给调用者?

我正在编写一个方法,旨在返回一个充满配置键和值的字典.构建这个字典的方法是动态的,所以我需要将这组键和值作为集合(可能IDictionary<string, string>)返回.在我的各种读物中(来源逃避了我),关于从方法调用返回集合类型的一般共识不是.

我理解这个政策的原因,我倾向于同意,但在这种情况下,我看不到其他选择.这是我的问题:有没有办法可以将这些数据返回给调用者,同时遵循这个原则?

编辑:我听到不允许这种行为的原因是,客户端要使用(但未修改)的集合或字典类型会暴露太多行为,从而产生调用者可以修改类型的错觉.例如,Dictionary具有Add和Remove方法,以及一个可变索引器.如果字典中的值是只读的,那么这些方法充其量是多余的.如果内部集合被暴露,则可以进一步造成损害,并且集合的"所有者"不会预期从外部来源对集合进行更改.

还有其他原因我听说过,但我无法回想起它们 - 这些是我的情况中最相关的.

编辑:更多说明:我遇到的问题是我正在构建一个API,所以我无法控制调用此函数的客户端.克隆字典不是问题,但我试图让我的API保持尽可能干净.使用"添加"和"删除"等方法返回字典意味着可以或应该修改集合,但实际情况并非如此.这里的修改是没有意义的,所以我不想通过返回类型的接口公开该功能的承诺.


解决方案:为了满足我对干净API的需求,我将编写一个自定义的Dictionary类,它不会公开变异方法Add和Remove,或者设置索引器.这种类型不会实现IDictionary,但我会编写一个方法ToDictionary来返回一个数据IDictionary.它将实现IEnumerable<KeyValuePair<TKey, TValue>>,以便访问可枚举的标准LINQ操作.现在我需要的是我的自定义词典类型的名称... =)谢谢大家.

.net c# collections

5
推荐指数
2
解决办法
480
查看次数

ASP.NET MVC - 从helper方法获取ViewContext

我想创建一个静态帮助方法,我可以从视图中调用.

辅助方法是否可以访问当前的ViewContext而无需将ViewContext作为参数显式传递给方法?

类似于HttpContext.Current,除了ViewContext.

asp.net asp.net-mvc viewcontext

5
推荐指数
1
解决办法
4337
查看次数

Uploadify(闪存文件上传)和集成Windows身份验证

我在使用Uploadify时遇到了问题,希望有人可以提供帮助.我已将Uploadify放入我的应用程序,并且所有工作正常(使用VS Web服务器).一切正常并检查,直到我将应用程序部署到使用集成Windows身份验证的测试环境中.

当我实际上去上传文件时,浏览器会显示登录提示.此时,即使您输入正确的用户名和密码,该请求似乎也无法完成,即使您告诉浏览器记住密码,它仍然会显示登录提示.

当这种情况开始发生时,我决定旋转Fiddler,看看发生了什么.但是猜猜是什么,当Fiddler正在运行问题时不会发生.

不幸的是,我无法让运行Fiddler成为运行应用程序的必要条件.因此,任何人都有任何想法.我知道在使用表单身份验证时,Uploadify/flash存在一些问题,但我认为它们并未贯彻到集成Windows身份验证.

browser iis flash file-upload uploadify

5
推荐指数
1
解决办法
4034
查看次数

使用这些设施对正交性有何影响?

我读程序员修炼:从中级到主安德鲁·亨特,大卫·托马斯.当我读到一个叫做正交性的术语时,我在想我正确的做法.我很了解它.然而,在本章的最后,提出了一些问题来衡量对该主题的理解程度.当我试图回答这些问题时,我意识到我并没有完全理解它.所以为了澄清我的理解,我在这里问这些问题.

C++支持多重继承,Java允许类实现多个接口.使用这些设施对正交性有何影响?使用多重继承和多个接口之间的影响是否存在差异?

multiple-inheritance conceptual orthogonal

5
推荐指数
1
解决办法
669
查看次数

WoW lua API的主要来源?

我一直在寻找有关魔兽世界插件API的第一手信息。有几个不错的Wiki,但是它们的参考链接仅指向内部。当然,暴雪发布了一些有关该主题的信息。

是否可以从逆向工程和论坛中真正收集他们的所有信息?我很难相信这一点。

lua add-on world-of-warcraft lua-api

5
推荐指数
1
解决办法
5888
查看次数

c#dll加密

我需要加密 ASP.NET 页面使用的 C# 代码。所以,当我编译创建一个 DLL 文件时,我确实需要加密我的 DLL 文件。请帮我如何加密DLL文件...

encryption dll code-access-security dllexport code-security

4
推荐指数
1
解决办法
1万
查看次数

如何实施Telerik Custom Aggregate?

我有一个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)

c# aggregate telerik telerik-grid asp.net-mvc-3

4
推荐指数
1
解决办法
7918
查看次数

Twitter的Bootstrap预先设置

我正在使用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)

javascript typeahead twitter-bootstrap

4
推荐指数
1
解决办法
7879
查看次数

xxx.tostring()和(string)xxx有什么区别?

下面两个字符串方法的区别是什么?

string str1 = dr["RAGStatusCID"].ToString();
string str2 = (string)dr["Description"];
Run Code Online (Sandbox Code Playgroud)

c# asp.net

3
推荐指数
1
解决办法
1964
查看次数

循环遍历ac#Dictionary中的项目

我想对C#字典中的每个对象做一些事情.keyVal.Value看起来有点尴尬:

foreach (KeyValuePair<int, Customer> keyVal in customers) {
    DoSomething(keyVal.Value);
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点也快?

c#

3
推荐指数
2
解决办法
348
查看次数