小编Jer*_*Gee的帖子

使用事件而不是异常来实现错误处理

我正在研究一些在其业务和数据层中使用模式的代码,这些代码使用事件来发出错误信号,例如

resource = AllocateLotsOfMemory();
if (SomeCondition())
{    
    OnOddError(new OddErrorEventArgs(resource.StatusProperty));
    resource.FreeLotsOfMemory();    
    return;
}
Run Code Online (Sandbox Code Playgroud)

这看起来很奇怪,特别是当调用它的代码需要挂钩事件时(有四个或五个不同的!).

开发人员告诉我,这样他们就可以在错误处理代码中引用已分配资源的属性,并且在此层保留错误之后清理的责任.

这有点儿意义.

替代方案可能是这样的

resource = AllocateLotsOfMemory();
if (SomeCondition())
{   
    BigObject temporary = resource.StatusProperty;
    resource.FreeLotsOfMemory();
    throw new OddException(temporary);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. BigObject释放异常对象时释放此" ",我们是否需要这种模式?

  2. 有没有其他人体验过这种模式?如果是这样,你发现了什么陷阱?有什么优势?

谢谢!

c# events design-patterns exception

10
推荐指数
2
解决办法
3520
查看次数

无法从'out T'转换为'out Component'

这里有一些不编译的C#代码,给出以下消息:

无法从'out T'转换为'out Component'

    public void Get<T>(out T c) where T : Component
    {
        m_components.TryGetValue(typeof(T), out c);
    }
Run Code Online (Sandbox Code Playgroud)

这是编译的代码:

    public void Get<T>(out T c) where T : Component
    {
        Component temp;
        m_components.TryGetValue(typeof(T), out temp);
        c = (T)temp;
    }
Run Code Online (Sandbox Code Playgroud)

我想知道为什么第一个代码无效,因为"where T:Component"明确指出T是Component类型.

谢谢

c#

9
推荐指数
2
解决办法
1892
查看次数

是否有最好的信用卡加密.NET算法?

.NET System.Security.Cryptography命名空间有一个相当令人困惑的算法集合,我可以用它来加密信用卡详细信息.哪个最好?

对于相对较短的字符串,它显然需要是安全的.

编辑:我在英国,我知道我们可以存储加密的信用卡详细信息,只要从不存储三位数的CVV号码.并感谢所有人的回应.

.net security encryption cryptography

8
推荐指数
4
解决办法
6968
查看次数

C#中的纤维:它们比迭代器更快,并且让人们使用它们?

所以我正在和一位同事聊聊有关光纤的问题,在2003年发表这篇论文,描述了使用Fiber API在C#中实现协同程序.

本文的实现Yield是针对.NET 1.1的,因此它早yield return于.NET 2.0中出现的语法.

乍一看,它确实看起来这里的实现可能更快,并且可以很好地扩展到多个CPU.

有人用过吗?

c# yield coroutine fiber

8
推荐指数
2
解决办法
4120
查看次数

是否可以在Visual Studio 2010中停止.sql文件的智能感知?

我正在使用Visual Studio 2010在具有".sql"扩展名的文件中编辑MySQL数据库的DDL.IDE坚持在完全合法的MySQL语法下提供红色波形,大概是因为它不是合法的SQL Server语法.

是否可以禁用.SQL文件的语法突出显示?

或者,更好的是,MySQL IntelliSense突出显示是否可用?

mysql intellisense visual-studio-2010

8
推荐指数
1
解决办法
2721
查看次数

使用Windows窗体应用程序映射

我正在构建一个需要地图的C#/ Winforms应用程序(谷歌地图,Bing地图等).但我对ToU(许可证) - 非商业用途等非常困惑.

我的问题:

  1. 为了商业目的,您会建议(最好是免费)嵌入winforms应用程序的映射提供程序.

  2. 如果应用程序处于"离线"状态,即无法从映射服务器获取切片,您会建议使用哪种映射提供程序.

  3. 在我阅读ToU中的非商业用途条款之前,谷歌地球似乎很有希望,你知道通过购买许可证是否可以豁免吗?任何商业替代品?

c# google-maps google-earth bing-maps winforms

8
推荐指数
1
解决办法
9190
查看次数

C#单元测试设计问题:如何减少单元测试写入的冗余?

这是我的c#单元测试设计问题:

我有一个测试,我想在一些修改文件的代码上运行.我的测试将运行修改文件的代码,然后检查结果.到目前为止非常直接......

问题是,我有大约10个文件(很快就会更多)我想要运行相同的单元测试.当测试本身真的相同时,我不想为每个文件编写一个新的单元测试.

我可以编写一个查询文件夹中文件的测试,然后在每个文件上运行测试逻辑,但使用此方法只会报告整个文件集的一个通过/失败结果.

我喜欢创建某种动态系统,其中我放置在特定文件夹中的每个文件都通过相同的单元测试运行.因此,如果文件夹中有25个文件,则测试运行25次,单元测试结果报告运行了25个测试,并且每个测试都包含单独的通过/失败.

任何想法如何或如果这可以在ac#单元测试中完成?或者用nunit测试?

谢谢!我希望这不是一个重复的问题.我环顾四周,但找不到任何东西.

.net c# nunit unit-testing

7
推荐指数
3
解决办法
670
查看次数

如何将SQL用户定义的函数添加到实体框架?

我可以像在.dbml中一样在我的.edmx文件中添加SQL函数吗?如果可以的话,怎么做?如果我不能,是否有任何解决方法?

我试图谷歌,但没有找到任何具体的答案,如何做到这一点.

基于给定的答案,我创建了一个存储过程,并尝试添加"导入函数",但它表示"存储过程不返回任何列".我哪里做错了?功能:

ALTER FUNCTION [dbo].[fn_locationSearch](@keyword varchar(10))
RETURNS TABLE
AS
RETURN
(
SELECT CustomerBranch.ID,CustomerBranch.BranchName,CustomerBranch.Longitude,CustomerBranch.Latitue,CustomerBranch.Telephone,CustomerBranch.CategoryID,CustomerBranch.Description

FROM FREETEXTTABLE (CustomerOffer,*,@keyword) abc INNER JOIN OffersInBranch
ON abc.[key]=OffersInBranch.OfferID INNER JOIN CustomerBranch ON     OffersInBranch.BranchID=CustomerBranch.ID
UNION
SELECT    CustomerBranch.ID,CustomerBranch.BranchName,CustomerBranch.Longitude,CustomerBranch.Latitude,CustomerBranch.Telephone,CustomerBranch.CategoryID,CustomerBranch.Description
FROM CustomerBranch WHERE FREETEXT(*,@keyword)
)
Run Code Online (Sandbox Code Playgroud)

存储过程:

ALTER PROCEDURE USP_locationSearch
(@keyword varchar(10))
AS
BEGIN
SELECT * from dbo.fn_locationSearch(@keyword)
END
Run Code Online (Sandbox Code Playgroud)

linq sql-server asp.net entity-framework-4

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

并行上传blob时"指定的阻止列表无效"

我有一个(相当大的)Azure应用程序,它将(相当大的)文件并行上传到Azure blob存储.

在几个百分点的上传中,我得到一个例外:

The specified block list is invalid.

System.Net.WebException: The remote server returned an error: (400) Bad Request.

这是当我们运行一个相当无害的代码来将Blob并行上传到Azure存储时:

    public static void UploadBlobBlocksInParallel(this CloudBlockBlob blob, FileInfo file) 
    {
        blob.DeleteIfExists();
        blob.Properties.ContentType = file.GetContentType();
        blob.Metadata["Extension"] = file.Extension;

        byte[] data = File.ReadAllBytes(file.FullName);

        int numberOfBlocks = (data.Length / BlockLength) + 1;
        string[] blockIds = new string[numberOfBlocks];

        Parallel.For(
            0, 
            numberOfBlocks, 
            x =>
        {
            string blockId = Convert.ToBase64String(Guid.NewGuid().ToByteArray());
            int currentLength = Math.Min(BlockLength, data.Length - (x * BlockLength));

            using (var memStream = new MemoryStream(data, x * …
Run Code Online (Sandbox Code Playgroud)

azure blobstorage

7
推荐指数
1
解决办法
3760
查看次数

使用ASP.NET成员资格提供程序的现成安全令牌服务(STS)?

我想移动一个当前使用标准ASP.NET成员资格提供程序的站点,以通过Windows Identity Foundation和Azure ACS使用基于声明的身份验证.

我们将使用OAuth 2.0安全的REST服务来展示该网站,因此这似乎是一个明智的方法.我们还需要将我们的身份验证与外部第三方ADFS和其他系统联合起来,这正是ACS解决的问题.

但是,我还希望保留现有用户使用其现有凭据的能力.

为此,我认为我需要一个与ASP.NET成员资格提供程序一起使用的自定义STS.

所有文献(例如Bertocci的"编程Windows身份基础")都表明编写自定义STS是一个坏主意.并且,我同意 - 我真的不喜欢编写自己的安全代码.

那么 - 是否有可以使用会员提供商数据的STS?

.net security asp.net-membership wif acs

6
推荐指数
1
解决办法
5150
查看次数