小编Gre*_*reg的帖子

如何根据IEqualityComparer <T>从列表中获取对象

Linq中的Compare方法允许您通过IEqualityComparer查找,但我找不到允许您通过同一个比较器检索项目的对应方法.

这真的是最好的方法吗?

MyItem myFinderItem = new MyItem(keyField1, keyField2);
if (myList.Contains(myFinderItem, new MyEqualityComparer()))
{
    MyItem myRealItem = myList.Single(item => new MyEqualityComparer().Equals(item , myFinderItem));
}
Run Code Online (Sandbox Code Playgroud)

(我正在通过调用Except Linq方法分享IEqualityComaprer的用法,我想维护一个单一来源进行相等比较)

编辑:我正在寻找具有签名的方法:

T Find<T>(T t, IEqualityComparer<T> comparer)
Run Code Online (Sandbox Code Playgroud)

编辑2:我想这很有效,它很时髦.但它太可怕了,永远不会用它 :(

myList.Intersect( new List<MyItem>{myFinderItem}, comparer).Single();
Run Code Online (Sandbox Code Playgroud)

c# linq

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

在C#内部使用TPL内部服务的基本设计模式

我正在尝试构建Windows服务,它需要某种并行性来汇集来自不同ftp源的文件.为了启动多个ftp下载,我正在寻找TPL库来轻松地进行foreach循环并使并行性变得非常容易.但是,当我搜索如何启动或停止我的服务时,我最好的资金是在OnStart()方法中创建新线程,如下所述/sf/answers/340612541/

阅读TPL总是注意到TPL比手动线程和手动停止线程更先进.

我没有找到任何描述如何在WindowsService中进行TPL循环的示例帖子?

我的代码:

protected override void OnStart(string[] args)
{
     _thread = new Thread(WorkerThreadFunc);
     _thread.Name = "My Worker Thread";
     _thread.IsBackground = true;
     _thread.Start();
}
Run Code Online (Sandbox Code Playgroud)

并在里面WorkerThreadFunc做了一些TPL

private void WorkerThreadFunc()
{
foreach (string path in paths)
{
    string pathCopy = path;
    var task = Task.Factory.StartNew(() =>
        {
            Boolean taskResult = ProcessPicture(pathCopy);
            return taskResult;
        });
    task.ContinueWith(t => result &= t.Result);
    tasks.Add(task);
}

}
Run Code Online (Sandbox Code Playgroud)

或者我应该开始我的WorkerThreadFunc作为TASK?

c# multithreading windows-services task-parallel-library

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

ASP.NET中基于数据的授权

简介:我需要根据URL的查询字符串中存在的数据来授权页面,而不仅仅是页面名称.


背景:

假设我正在建立一个图书馆库存系统.可以在管理员或用户角色中创建用户并将其分配给单个库.同一数据库中有数百个竞争库,因此确保一个库的用户无法查看其他库中的库存非常重要.

现在我正在使用一个非常标准的ASP.NET设置:使用SqlMembershipProvider进行表单身份验证.使用SqlRoleProvider进行授权,通过<authorization>web.config中的部分进行配置.使用SiteMap提供程序进行安全修整以隐藏未经授权的页面.

为了控制库存信息泄漏,我手动检查用户的关联库ID与每个库存查询.它有效,但它很乏味且容易出错.一定有更好的方法.

题:

现在,用户可以在库中创建任意"集合".(例如,集合A中包含书籍1,2和3.)管理员希望能够授予单个集合的管理员/用户访问权限,而不仅仅是整个库.

因此,如果用户访问www.com/Book.aspx?BookId=1,系统需要确保用户在显示页面之前具有"Book 1"所在的集合的权限.如果他们访问www.com/Reviews.aspx?ReviewId=23,我需要确保"评论"适用于他们有权查看的集合中的图书.

1)如何以最标准的ASP.NET方式实现这一点?
在基页中手动检查?
一个自定义的HttpModule?
自定义角色提供程序?
我对如何存储管理员/用户权限不感兴趣,而是根据这些权限授权的方式/位置. (如何实现任何这些的例子表示赞赏)

2)为了进一步复杂化,我仍然希望安全修整来检查用户是否拥有任何集合或库的管理员权限,如果他没有,则隐藏管理页面.

asp.net authorization

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

检查后面代码中的单选按钮时出现问题

我有一个简单的ASP.NET表单,带有DropDownList和两个RadioButtons(两者都共享相同的GroupName).

在DropDownList的SelectedIndexChanged事件中,我设置Checked=true了两个RadioButtons.

它设置第二个RadioButton很好,但它不会检查第一个.我究竟做错了什么?

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
    <form id="form1" runat="server">
        <asp:DropDownList runat="server" AutoPostBack="true" OnSelectedIndexChanged="ddl_Changed"
            ID="ddl">
            <asp:ListItem Text="Foo" />
            <asp:ListItem Text="Bar" />
        </asp:DropDownList>
        <asp:RadioButton runat="server" ID="rb1" Text="Foo" GroupName="foobar" />
        <asp:RadioButton runat="server" ID="rb2" Text="Bar" GroupName="foobar" />
    </form>
</body>
</html>

protected void ddl_Changed(object sender, EventArgs e)
{
    if (ddl.SelectedIndex == 0)
        rb1.Checked = true; // <- Doesn't actually work
    else
        rb2.Checked = true;
}
Run Code Online (Sandbox Code Playgroud)

asp.net radio-button

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

专业和有用的错误页面的示例

您看到的真实错误网页给您留下了真正的印象,对所有类型的用户(精明,新手,悠闲,沮丧等)真正有用.你为什么对这个错误印象深刻?

custom-error-pages

6
推荐指数
0
解决办法
2356
查看次数

在ASP.NET LogIn Control中使用电子邮件作为用户名

我想在ASP.NET应用程序中使用常规登录系统,但我想使用用户的电子邮件地址作为其用户名(在许多网站中很常见.)但是,似乎没有允许的属性或属性我做这样的事情; 用户名和电子邮件地址似乎总是分开的.可以这样做还是需要一些复杂的定制?谢谢.

asp.net forms-authentication login

6
推荐指数
2
解决办法
6056
查看次数

我被困在UpdatePanel陷阱中

我有一个很大的问题.我正在ASP.NET 3.5中创建一个CRM(客户关系管理)系统

我将整个项目基于DevExpress.com控件和UpdatePanels的使用.

现在我的一个页面,即整个系统的中心页面,包含了大量的可能性,因此有大量的UserControls.

现在我的问题是它变得非常慢,因为UpdatePanels正在重新发布整个页面而不仅仅是更新面板.我们正在谈论弹出窗口出现之前3-4秒:(

有没有什么办法可以在不破坏我的脖子的情况下将整个系统从UpdatePanels重构出来?无论如何,我可以优化我对UpdatePanels的使用吗?

ViewState也绝对是巨人.

欢迎任何好的想法......

asp.net updatepanel

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

如何使用c#解析缺少分隔符的字符串到DateTime?

嘿.不知怎的,我有这个字符串"20100205 162206".这是一个没有任何分隔符字符的日期和时间.

我需要这个作为C#中的DateTime.什么是最好的方法?

c# asp.net

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

什么类型的图表最适合可视化线程问题(例如争用)?

在调试我们的系统问题时,我发现线程争用导致了瓶颈。我需要向参与处理此问题的其他人解释这一现象。其中一些不是来自开发团队(但是,他们具有相当的技术性)。那么什么类型的图表可以用来描述线程问题,例如争用、死锁等?一些例子会非常有用。

diagram multithreading deadlock contention

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

C#directory.getfiles内存帮助

这是我正在使用的代码:

using (StreamWriter output = new StreamWriter(Path.Combine(masterdestination, "Master.txt")))
{
     string masterfolders = sourcefolder1;
     string[] filess = Directory.GetFiles(masterfolders, "*.txt");
     foreach (string file in filess)
     {
        output.WriteLine(Path.GetFileName(file));
     }
}  
Run Code Online (Sandbox Code Playgroud)

此代码将搜索用户指定目录中任何txt文件的所有文件.这些目录有时包含2百万个文件.

在它运行时监视这个过程我已经看到它爬升到800MB的内存使用量.有没有办法可以保持这个过程的速度并限制它使用的内存?或者让它读取并转储并继续?哈希表?任何想法都会很棒.

c#

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