小编pro*_*ick的帖子

ILookup <TKey,TVal>与IGrouping <TKey,TVal>

我一直有麻烦关节之间的差异ILookup<TKey, TVal>IGrouping<TKey, TVal>,并很好奇,如果我理解正确了.LINQ通过生成IGrouping项目序列来复杂化问题,同时也为我提供了ToLookup扩展方法.所以在我仔细观察之前感觉它们是一样的.

var q1 = 
    from n in N
    group n by n.MyKey into g
    select g;
// q1 is IEnumerable<IGrouping<TKey, TVal>>
Run Code Online (Sandbox Code Playgroud)

这相当于:

var q2 = N.GroupBy(n => n.MyKey, n => n);
// q2 is IEnumerable<IGrouping<TKey, TVal>>
Run Code Online (Sandbox Code Playgroud)

这看起来很像:

var q3 = N.ToLookup(n => n.MyKey, n => n);
// q3 is ILookup<TKey, TVal>
Run Code Online (Sandbox Code Playgroud)

我在以下类比中是否正确?

  1. An IGrouping<TKey, TVal>是一个单独的组(即键控序列),类似于KeyValuePair<TKey, TVal>值实际上是一系列元素(而不是单个元素)
  2. 一个IEnumerable<IGrouping<TKey, TVal>>是那些序列(类似于迭代时得到的结果)IDictionary<TKey, TVal>
  3. An ILookup<TKey, TVal>更像是一个IDictionary<TKey, …

c# linq group-by igrouping ilookup

75
推荐指数
3
解决办法
9990
查看次数

通过默默无闻,密码不是一种安全形式吗?

我知道通过默默无闻的安全性是不受欢迎的,并且被认为不是很安全,但通过默默无闻的密码安全性不是吗?只要没有人发现它,它就是安全的.

这只是默默无闻的问题吗?(即一个好的密码很好的盐渍和散列是不切实际的打破)

注意我不是在询问保存密码的过程(假设它们是正确的哈希和盐渍).我问的是整个想法使用密码,这是一条信息,如果知道可能会损害一个人的帐户.

或者我误解了默默无闻的安全意味着什么?我想这就是我认为的意思,就是存在一些信息,如果已知会损害系统(在这种情况下,系统被定义为密码意味着要保护的)

security passwords security-by-obscurity

28
推荐指数
3
解决办法
2239
查看次数

使用.Net HttpListener进行多线程处理

我有一个听众:

listener = new HttpListener();
listener.Prefixes.Add(@"http://+:8077/");
listener.Start();
listenerThread = new Thread(HandleRequests);
listenerThread.Start();
Run Code Online (Sandbox Code Playgroud)

我正在处理请求:

private void HandleRequests()
{
    while (listener.IsListening)
    {
        var context = listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
        context.AsyncWaitHandle.WaitOne();
    }
}

private void ListenerCallback(IAsyncResult ar)
{
    var listener = ar.AsyncState as HttpListener;

    var context = listener.EndGetContext(ar);

    //do some stuff
}
Run Code Online (Sandbox Code Playgroud)

我想void Stop()用这样的方式写:

  1. 它将阻塞,直到所有当前处理的请求结束(即等待所有线程"执行某些操作").
  2. 虽然它将等待已经开始的请求,但它将不允许任何更多的请求(即在开始时返回ListenerCallback).
  3. 之后它将调用listener.Stop()(listener.IsListening变为假).

怎么可能写?

编辑:您对此解决方案有何看法?安全吗?

public void Stop() 
{
    lock (this)
    {
        isStopping = true;
    }
    resetEvent.WaitOne(); //initially set to true …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading httplistener

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

如何在WPF程序中使用IDataErrorInfo.Error?

我有一个这样的对象:

public class Person : IDataErrorInfo
{
    public string PersonName{get;set;}
    public int Age{get;set;}

    string IDataErrorInfo.this[string propertyName]
    {
        get
        {
            if(propertyName=="PersonName")
            {
                if(PersonName.Length>30 || PersonName.Length<1)
                {
                    return "Name is required and less than 30 characters.";
                }
            }
            return null;
        }
    }

    string IDataErrorInfo.Error
    {
        get
        {
            if(PersonName=="Tom" && Age!=30)
            {
                return "Tom must be 30.";
            }
            return null;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

绑定PersonName和Age属性很简单:

<TextBox Text="{Binding PersonName, ValidatesOnDataErrors=True}" />
<TextBox Text="{Binding Age, ValidatesOnDataErrors=True}" />
Run Code Online (Sandbox Code Playgroud)

但是,如何使用Error属性并正确显示它?

validation wpf textbox idataerrorinfo

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

为什么C#/ .net字符串长度为前缀且空终止?

在阅读了什么是空终止字符串的基本原理?我发现在C#/.中,一些类似的问题在内部,Net字符串都是长度前缀和null终止,就像在BSTR数据类型中一样.

字符串是长度前缀还是空终止而不是例如的原因是什么.只有长度 - 前缀?

.net c# string bstr null-terminated

18
推荐指数
2
解决办法
3488
查看次数

是否使用GUID安全性虽然默默无闻?

如果您使用GUID作为面向公众的应用程序的密码作为获取服务访问权的手段,这种安全性是否通过默默无闻?

我认为显而易见的答案是肯定的,但是对我来说安全级别似乎很高,因为猜测GUID的可能性非常低是正确的吗?

更新

GUID将存储在设备中,当插入时,将通过SSL连接通过GUID发送.

也许我可以生成GUID,然后在GUID上执行AES 128位加密并将该值存储在设备上?

security guid security-by-obscurity

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

Struts 2 <s:property />标记中的格式编号

我想格式化<s:property value="summary.total"/>Struts 2中标记显示的数字.有一个double值.我怎样才能做到这一点?我应该用OGNL吗?

或者也许我必须使用<s:text/>标签并在资源文件中定义我的格式?

java struts2 ognl

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

PDO如何知道MySQL中最后插入的id?

编辑:这个题目标题最初是:Doctrine如何知道MySQL中最后插入的id?并与Doctrine ORM mapper有关.经过一番挖掘后,我发现这个问题与Doctrine无关,而是与PDO_MySQL,MySQL C API以及最终的MySQL客户端 - 服务器通信有关.我决定更改标题,所以也许有人会找到他/她的问题的答案.

对于那些不使用学说的人:我很好奇,为什么吼叫:

mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
Run Code Online (Sandbox Code Playgroud)

或类似的:

$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
Run Code Online (Sandbox Code Playgroud)

将导致SELECT LAST_INSERT_ID()日志中只有一个位置(没有单独):

1701 Query    INSERT INTO category (name) VALUES ('cat')
Run Code Online (Sandbox Code Playgroud)

原始问题:

我有2张桌子:

category(id,name)
product(id, name, categoryId)
Run Code Online (Sandbox Code Playgroud)

我创建了新的类别对象和产品对象.我将类别对象分配给产品对象.我没有设置任何ID:

$product = new Product();
$product->name = 'asdf';

$category = new Category();
$category->name = 'cat';

$product->Category = $category;
Run Code Online (Sandbox Code Playgroud)

之后,我刷新连接并检查MySQL日志:

1684 Query  START TRANSACTION
1684 Query  INSERT INTO category (name) …
Run Code Online (Sandbox Code Playgroud)

php mysql pdo doctrine communication-protocol

14
推荐指数
1
解决办法
8883
查看次数

WinForms数据绑定

我是数据绑定的新手.

我有这些课程:

public class Foo : List<Bar>
{
    public string FooName { get; set; }
}

public class Bar
{
    public string BarName { get; set; }
    public string BarDesc { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我有一个 List<Foo>

我想要有Foo物品ComboBoxBar物品ListBox.当我更改所选项目时ComboBox,我想要ListBox更改.当我更改所选项目时,ListBox我想TextBox填写BarDesc.

下面只对作品ListBoxComboBox:

comboBox1.DataSource = foos;
comboBox1.DisplayMember = "FooName";
listBox1.DataBindings.Add("DataSource", foos, "");
listBox1.DisplayMember = "BarName";
Run Code Online (Sandbox Code Playgroud)

我现在不如何绑定选择做BarListBoxTextBox.Text财产.也许添加绑定 …

c# data-binding winforms

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

为什么InvokeRequired比WindowsFormsSynchronizationContext更受欢迎?

任何时候初学者都会问:如何从C#中的另一个线程更新GUI?,答案很简单:

if (foo.InvokeRequired)
{
    foo.BeginInvoke(...)
} else {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但使用它真的很好吗?在非GUI线程执行后foo.InvokeRequired,状态foo可以改变.例如,如果我们在之后foo.InvokeRequired,但之前关闭表单foo.BeginInvoke,则调用foo.BeginInvoke将导致InvalidOperationException:在创建窗口句柄之前,无法在控件上调用Invoke或BeginInvoke.如果我们在调用之前关闭表单,这不会发生InvokeRequired,因为false即使从非GUI线程调用它也是如此.

另一个例子:让我们说foo是一个TextBox.如果你关闭表单,然后执行非GUI线程foo.InvokeRequired(这是错误的,因为表单已关闭),foo.AppendText它将导致ObjectDisposedException.

相比之下,在我看来,使用WindowsFormsSynchronizationContext更容易 - Post只有当线程仍然存在时才会发布使用回调,如果线程不再存在则使用Sendthrows进行同步调用InvalidAsynchronousStateException.

是不是WindowsFormsSynchronizationContext更容易使用?我错过了什么吗?如果它不是真的线程安全,为什么我应该使用InvokeRequired-BeginInvoke模式?你觉得哪个更好?

.net c# multithreading synchronization winforms

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