小编Sté*_*écy的帖子

在矩形中交换X,Y坐标,这个操作叫什么?

试图为交换每个坐标X和Y值的方法找到一个好名字.

这个操作有名字吗?

从本质上讲,这就是做了什么

(1,2) - >(2,1)

在多边形上,这与旋转-90度并进行水平翻转或镜像相同.

math coordinates

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

使用no-op lambda表达式初始化事件是否会阻止GC?

可以使用以下构造来声明事件:

public class MyClass
{
    public event EventHandler<EventArgs> SomeEvent = (s,e) => {};

    public void SomeMethod ()
    {
        // Do something interesting... ;)
        SomeEvent (this, new EventArgs);
    }
}
Run Code Online (Sandbox Code Playgroud)

这允许在不需要检查事件是否为空的情况下引发事件.

现在,假设一个对象A持有对MyClass对象的引用,为该事件注册,然后稍后取消注册.

var myClass = new MyClass();
myClass.SomeEvent += MyHandler;
...
myClass.SomeEvent -= MyHandler;
myClass = null;
Run Code Online (Sandbox Code Playgroud)

即使事件中仍存在no-op lambda表达式,GC是否会收集myClass?

我想是的,因为对象root不再被其他对象引用了......任何人都可以确认或证明不是吗?

c# events lambda

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

如何让用户组件成为WinForms中数据绑定的数据源?

我创建了一个从Web服务获取数据的组件.Web服务返回ADO.NET数据集.

我希望这个组件成为与其他控件绑定的数据源.源数据将是数据集.

所以,我在组件中添加了一个属性DataSet.

private DataSet _dataSet;
public DataSet DataSet
{
    get { return _dataSet; }
    set
    {
        if (_dataSet == value)
            return;
        _dataSet = value;
        OnPropertyChanged (this, new PropertyChangedEventArgs ("DataSet"));
    }
}
Run Code Online (Sandbox Code Playgroud)

我为组件实现了IListSource.

public partial class MyComponent : Component, INotifyPropertyChanged, IListSource
{
    ...

    IList IListSource.GetList()
    {
        return DataSet == null ? null : ((IListSource)DataSet).GetList();
    }

    bool IListSource.ContainsListCollection
    {
        get { return DataSet != null && ((IListSource)DataSet).ContainsListCollection; }
    }

    ...
}
Run Code Online (Sandbox Code Playgroud)

在从Web服务接收数据的方法中,我执行以下操作:

...

DataSet = response.DataSet;    // Copy dataset from web …
Run Code Online (Sandbox Code Playgroud)

.net data-binding components winforms

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

C#:您如何建议重构这些类?(接口,聚合或其他任何东西)

拥有以下类,在两个不同的程序集中:

class Member
{
    public string Label {get;set;}
    // Lots of other fields...

    public double Thickness {get;set;}
    public double Width {get;set;}
    public double Length {get;set;}
    public double GetVolume ()
    {
        return Thickness * Width * Length;
    }

    // Other methods
}

class OtherMember
{
    public string CompositeLabel {get;set;}
    // Lots of other fields (not related to other class: Member)

    public double Thickness {get;set;}
    public double Width {get;set;}
    public double Length {get;set;}
    public double GetVolume ()
    {
        return Thickness * Width …
Run Code Online (Sandbox Code Playgroud)

c# refactoring model interface

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

如何在 WinForm 组件的 UI 线程上调用?

我正在编写一个 WinForm 组件,在那里我启动一个任务来进行实际处理并在继续时捕获异常。从那里我想在 UI 元素上显示异常消息。

Task myTask = Task.Factory.StartNew (() => SomeMethod(someArgs));
myTask.ContinueWith (antecedant => uiTextBox.Text = antecedant.Exception.Message,
                     TaskContinuationOptions.OnlyOnFaulted);
Run Code Online (Sandbox Code Playgroud)

现在我收到一个跨线程异常,因为该任务正在尝试从一个明显的非 UI 线程更新 UI 元素。

但是,在 Component 类中没有定义 Invoke 或 BeginInvoke。

如何从这里开始?


更新

另外,请注意 Invoke/BeginInvoke/InvokeRequired 在我的 Component 派生类中不可用,因为 Component 不提供它们。

user-interface components invoke winforms

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

是否有一个算法(名称,实现)给出两个相同排序/内容但不同的起始项目以测试相等性的列表?

当然有一些东西,但谷歌搜索没有给我我正在寻找的东西.也许是因为我不知道要注意的算法的名称?

基本上,我有两个内容和大小相同的列表.

List1: {10, 30, 2, 4, 4}
List2: {4, 4, 10, 30, 2}
Run Code Online (Sandbox Code Playgroud)

请注意,两个列表的顺序相同.即:List2可以看作是从List1中的上一个位置到最后一个位置的开始,并且继续从List1的开始迭代直到返回到起始位置.

List1: {10, 30, 2, 4, 4} 10, 30, 2
                   |  |  |   |   |
List2:            {4, 4, 10, 30, 2}
Run Code Online (Sandbox Code Playgroud)

然后将这两个列表视为等效.

以下两个列表不是:

List1: {10, 30, 2, 4, 3} 10, 30, 2
                   |  |  X   X   |
List2:            {4, 4, 30, 10, 2}
Run Code Online (Sandbox Code Playgroud)

更新

我现在正在做的是将List1连接到自身并在其中搜索List2.

我觉得这个效率不高.

假设我想迭代每个列表一次?

更新

好吧,最后我使用了algo描述:检查字符串是否是另一个字符串的旋转而不连接 并将其调整为我的数据类型.

c# rotation

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

在C#中,如何创建一个定义并使用从枚举值派生的类层次结构?

给定枚举类型:

public enum Work
{
    Normal,
    Extended
}
Run Code Online (Sandbox Code Playgroud)

我想做的是以下内容.

public abstract class Builder<T>
{
    public static Builder<T> GetBuilder<T> (T work)
    {
        return new Builder<T> ();
    }
}

public class BuilderNormal : Builder<Work.Normal>
{
}

public class BuilderExtended : Builder<Work.Extended>
{
}
Run Code Online (Sandbox Code Playgroud)

我特别想避免在Builder中使用switch/case或使用我需要维护的映射,当我向Work添加新的枚举值时,即我可以这样做

public abstract class Builder
{
    public static Builder GetBuilder (Work work)
    {
        switch (work)
        {
            case Work.Normal:
                return new BuilderNormal ();

            case Work.Extended:
                return new BuilderExtended ();

            default:
                throw new ...
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,基本上,我想根据枚举值创建一个类的实例,并且该类必须是抽象类的子类.

c#

0
推荐指数
1
解决办法
135
查看次数