小编Stu*_*urm的帖子

列表过滤变体

是否有一种简单的方法(可能是一种方法)从列表中检索一个对象,具体取决于它的一个属性是否与所请求的属性匹配?

例如,如果我有List<Animal>,并且Animal该类具有属性Size.我如何从列表中获取对象Size=42?这就像过滤,但不是更容易和更快的方式吗?绝对使用ICollectionView.

public Animal getAnimalWithSize42 (List<Animal> animList)
{
    List<Animal> size42Animals = new List<Animal>
    foreach (Animal anim in animList)
    { 
        if(anim.Size==42)
       size42Animals.Add(anim);
    }
    return size42Animals;
}
Run Code Online (Sandbox Code Playgroud)

这是某种实现的功能吗?

c# methods list

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

动画StackPanel高度代码隐藏

我正试图用一个可扩展/可折叠StackPanel控制CheckBox.首先,我尝试在XAML中直接执行此操作,但我无法轻松实现.对于我来说,为这项任务提供一些代码隐藏对我来说不是问题.到目前为止,我有:

private void activateCheck_Checked(object sender, RoutedEventArgs e)
{
    DoubleAnimation expand = new DoubleAnimation(200, TimeSpan.FromMilliseconds(500));
    expandableStack.BeginAnimation(HeightProperty, expand);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个AnimationException,说:

无法使用'System.Windows.Media.Animation.DoubleAnimation'为'System.Windows.Controls.StackPanel'上的'Height'属性设置动画.有关详细信息,请参阅内部异常

这有什么不对?

c# wpf animation

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

拆分可变数量的空格

我正在尝试拆分这样的字符串:

7       300685  1235    200017  200018  200019
Run Code Online (Sandbox Code Playgroud)

7
300685
1235
200017
200018
200019
Run Code Online (Sandbox Code Playgroud)

字符串数组.

我想出了这个正则表达式,但它也保留了白色空间:

var myStrings = System.Text.RegularExpressions.Regex.Split(linea, @"\s+");
Run Code Online (Sandbox Code Playgroud)

那是因为我的目标是任何前面有空格的字符串.如何不这样做,只保留白色字符串.

我知道通过从数组中删除空字符串很容易完成,但我想用正则表达式来做.

c# regex

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

从包含重复项的列表创建字典

我的情况是,我有一个List<MyObject>MyObject有一个属性ID.我想从该列表中创建一个字典:

        var myDic = MyList.ToDictionary(e => e.ID);
Run Code Online (Sandbox Code Playgroud)

问题是有时我有一些重复的ID.在这种情况下,我想将第一个项目存储到字典中并忽略其余项目,并在可能的情况下对跳过的项目进行某种通知.

现在我正在获取一个Exception,告诉我我的列表中有重复的键,但我不能/不想修改原始列表.有没有一种方法可以在不创建没有重复ID的新列表的情况下执行任务?

c# dictionary

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

使用Dictionary创建对象的新实例

我想知道是否可以使用Dictionary<string, MyType>作为对象工厂,换句话说,给定一个字符串"Foo"我想要检索我的Foo类的新实例.

private Dictionary<string, MyType> ClassDic = new Dictionary<string, MyType>()
{
     {"Foo", new Foo()},
     {"Bar", new Bar()},
     //many more

}
Run Code Online (Sandbox Code Playgroud)

我基本上想要做的是替换大量的if语句,然后手动创建对象:

 if(line == "Foo") { Stuff.Add(new Foo() { ID = i }; }
 if(line == "Bar") { Stuff.Add(new Bar() { ID = i }; }
Run Code Online (Sandbox Code Playgroud)

(FooBar从同一基类派生)

这样的事情:

BaseClass myObject;
if(ClassDic.TryGetValue(line, out myObject))
{
     Stuff.Add(myObject);
     myObject.ID = i;
}
Run Code Online (Sandbox Code Playgroud)

问题出在我的代码中,字典给了我一个对象的相同引用,所以属性覆盖(例如,如果我有300个对象,那么所有300个对象的ID最后都会有相同的ID).

我也对这个问题的其他方法持开放态度.

c# dictionary

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

选择按名称刷

我有一个画笔的确切名称(AliceBlue,OrangeRed等),我想知道是否可以通过这个字符串选择画笔.Brushes是一个静态集合,我真的不知道如何做到这一点.我认为在正常的集合中,可以通过选择项目的name属性来完成Linq,但在这里似乎不起作用.

c# wpf brush

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

取消订阅活动

我以这种方式订阅活动:

  s1.MouseUp += (s, e) =>
  {
  indexOfPointToMove = -1;
  s1.LineStyle = LineStyle.Solid;
  MyModel.RefreshPlot(false);
   e.Handled = true;
 };
Run Code Online (Sandbox Code Playgroud)

我怎么能在不同的范围内取消订阅?(但在范围内s1)

我尝试过以下方法:

s1.MouseUp = null;



s1.MouseUp -=(s,e) =>
 {
       indexOfPointToMove = -1;
       s1.LineStyle = LineStyle.Solid;
       MyModel.RefreshPlot(false);
       e.Handled = true;
  };



s1.MouseUp += (s,e) =>
{
//nothing
};
Run Code Online (Sandbox Code Playgroud)

但事件还在解决,怎么办呢?

c# wpf events

0
推荐指数
2
解决办法
205
查看次数

列表中的收益项

在我的应用程序中,List<MyItem>只有一个getter:

public List<MyItem> myList
{
    get
    {
         MyHost.GetItemFromID(_i1); //this may be a long operation
         MyHost.GetItemFromID(_i2);
         MyHost.GetItemFromID(_i3);
         MyHost.GetItemFromID(_i4);
         MyHost.GetItemFromID(_i5);
    }
}
Run Code Online (Sandbox Code Playgroud)

此列表有时需要整体检索,有时只需要访问某些项目:即myList[3].有没有办法不建立整个列表,因为我只需要第四项?

c# yield

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

从私有std :: map获取价值

我从C++开始,我正在尝试通过组合扩展std :: map类.我想使用这个类CardPackage有id和指针的私人地图,我EntityCards和实现三个方法AddCard,GetCard并且RemoveCard将访问私人地图m.

问题是我无法使用m方法(findend),因为我收到以下错误消息:

expression must have a pointer type

我知道m需要成为一个指针,用箭头符号(或点)来访问,但我无法弄清楚是否要使代码适应我的要求.

标题:

#include <EntityCard.h>

class CardPackage
{
public:

CardPackage();
~CardPackage();

void AddCard(EntityCard* card);
EntityCard* GetCard(int id);
bool RemoveCard(int id);

private:
    map<int, EntityCard*> m;
};
Run Code Online (Sandbox Code Playgroud)

资源:

#include "CardPackage.h"

CardPackage::CardPackage()
{
}


CardPackage::~CardPackage()
{
}

   void CardPackage::AddCard(EntityCard *card)
   {
        m[card->ID] = card;
   }

EntityCard* CardPackage::GetCard(int id)
{
    if (id < 1) { …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

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

访问vector <vector <int >>元素

我已经定义:

const  vector<vector<int>> *ElementLines::Quad4 = new vector<vector<int>>
{
    { 0, 1 },
    { 1, 2 },
    { 2, 3 },
    { 3, 0 }
};
Run Code Online (Sandbox Code Playgroud)

稍后,我想迭代一个对象所指向的集合:

for (int j = 0; j < e->LinesIndices->size(); j++)
        {
            int n1Index = e->LinesIndices[j][0]; //I expect 0 (for j = 0)
            int n2Index = e->LinesIndices[j][1]; //I expect 1 (for j= 0)
        }
Run Code Online (Sandbox Code Playgroud)

上面的代码不会编译:

no suitable conversion function from "const std::vector<int, std::allocator<int>>" to "int" exists  
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加LinesIndices[j][0][0]它确实提供了一个int.我不太明白这里发生了什么.要访问一个向量,我只使用一对方括号[i],这个嵌套的向量向量是不同的?(我希望能够通过使用两对方括号来访问内容).

c++ indexing vector

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

标签 统计

c# ×8

wpf ×3

c++ ×2

dictionary ×2

animation ×1

brush ×1

events ×1

indexing ×1

list ×1

methods ×1

pointers ×1

regex ×1

vector ×1

yield ×1