有一个点列表,我如何找到顺时针顺序?
例如:
point[0] = (5,0)
point[1] = (6,4)
point[2] = (4,5)
point[3] = (1,5)
point[4] = (1,0)
Run Code Online (Sandbox Code Playgroud)
会说它是逆时针(或逆时针,对某些人来说).
有一个我无法修改的程序集(供应商提供),它有一个方法返回一个对象类型,但实际上是一个内部类型.
如何从程序集中访问对象的字段和/或方法?
请记住,我无法修改供应商提供的程序集.
从本质上讲,这就是我所拥有的:
来自供应商:
internal class InternalClass
public string test;
end class
public class Vendor
private InternalClass _internal;
public object Tag {get{return _internal;}}
end class
Run Code Online (Sandbox Code Playgroud)
从我使用供应商组件的装配.
public class MyClass
{
public void AccessTest()
{
Vendor vendor = new Vendor();
object value = vendor.Tag;
// Here I want to access InternalClass.test
}
}
Run Code Online (Sandbox Code Playgroud) 拥有以下课程(高度简化):
public class Child
{
public string Label;
public int CategoryNumber;
public int StorageId;
}
public class Parent
{
public string Label;
public List<Child> Children = new List<Child>();
}
Run Code Online (Sandbox Code Playgroud)
并拥有以下数据:
var parents = new List<Parent>();
var parent = new Parent() {Label="P1"};
parent.Children.Add(new Child() {Label="C1", CategoryNumber=1, StorageId=10});
parent.Children.Add(new Child() {Label="C2", CategoryNumber=2, StorageId=20});
parents.Add(parent);
parent = new Parent() {Label="P2"};
parent.Children.Add(new Child() {Label="C3", CategoryNumber=1, StorageId=10});
parent.Children.Add(new Child() {Label="C4", CategoryNumber=2, StorageId=30});
parents.Add(parent);
parent = new Parent() {Label="P3"};
parent.Children.Add(new Child() {Label="C5", CategoryNumber=3, StorageId=10});
parent.Children.Add(new Child() …Run Code Online (Sandbox Code Playgroud) 要创建空序列,请使用以下内容
var empty = Enumerable.Empty<string> ();
Run Code Online (Sandbox Code Playgroud)
是否有像这样容易创建空字典?
具有以下通用类,其中包含以下string, int, float, long类型:
public class MyData<T>
{
private T _data;
public MyData (T value)
{
_data = value;
}
public T Data { get { return _data; } }
}
Run Code Online (Sandbox Code Playgroud)
我想弄清楚MyData<T>每个项目的不同之处T.
我希望能够从列表中访问项目并获取其值,如下面的代码所示:
MyData<> myData = _myList[0]; // Could be <string>, <int>, ...
SomeMethod (myData.Data);
Run Code Online (Sandbox Code Playgroud)
其中,SomeMethod()声明如下:
public void SomeMethod (string value);
public void SomeMethod (int value);
public void SomeMethod (float value);
Run Code Online (Sandbox Code Playgroud)
更新:
SomeMethod()来自另一个我无法控制SomeMethod(object)但不存在的等级.
但是,我似乎无法找到让编译器开心的方法.
有什么建议?
谢谢.
使用C#2.0和MethodInvoker委托,我有一个GUI应用程序从GUI线程或工作线程接收一些事件.
我使用以下模式处理表单中的事件:
private void SomeEventHandler(object sender, EventArgs e)
{
MethodInvoker method = delegate
{
uiSomeTextBox.Text = "some text";
};
if (InvokeRequired)
BeginInvoke(method);
else
method.Invoke();
}
Run Code Online (Sandbox Code Playgroud)
通过使用这种模式,我不会复制实际的UI代码,但我不确定的是这种方法是否合适.
特别是这条线
method.Invoke()
Run Code Online (Sandbox Code Playgroud)
它是否使用另一个线程进行调用,或者它是否有点转换为直接调用GUI线程上的方法?
将一些项目(不是全部)从一个列表转移到另一个列表的最佳方式是什么.
我正在做的是以下内容:
var selected = from item in items
where item.something > 10
select item;
otherList.AddRange(selected);
items.RemoveAll(item => selected.Contains(item));
Run Code Online (Sandbox Code Playgroud)
为了获得最快/最好的代码,还有更好的方法吗?
试图让我的思绪围绕谷歌protobuf.我在C#中发现了一些protobuf的实现,但它们似乎缺少一个功能:能够从使用属性修饰的现有C#类自动生成.proto文件.
我想这样做而不是从.proto文件中自动生成的C#类的原因是因为我已经在我的项目中定义了C#类,我不想复制它们只是为了满足ProtoBuf.
有没有人遇到过这种情况?
更新
这可能只是装饰一个C#类而不是使用.proto文件来使用protobuf吗?
我有一个工厂接口,用于创建一些数据对象.
interface IFactory
{
IData Create (string name, string data);
}
interface IData
{
// ....
}
class Data : IData
{
public Data (string name, string data)
{
// .....
}
}
Run Code Online (Sandbox Code Playgroud)
我需要创建一个模拟工厂来传递给另一个模块,这个模块将使用这个模拟来创建数据.
简单来说,一个简单的模块如下所示:
class QuickModule
{
private readonly IFactory _factory;
public QuickModule (IFactory factory)
{
_factory = factory;
}
public IEnumerable<IData> GetData ()
{
yield return _factory.Create ("name1", "abc");
yield return _factory.Create ("name2", "def");
}
}
Run Code Online (Sandbox Code Playgroud)
因此,工厂被调用两次,有两组参数.
使用Moq,这很容易:
var factoryMock = new Mock<IFactory> ();
factoryMock.Setup (x => x.Create …Run Code Online (Sandbox Code Playgroud) 我需要检查序列是否有任何项目满足某些条件但同时不是所有项目都满足相同的条件.
例如,对于10个项目的序列,如果序列至少有一个满足条件但不是全部,则我想要为TRUE:
我知道我可以这样做:
mySequence.Any (item => item.SomeStatus == SomeConst) && !mySequence.All (item => item.SomeStatus == SomeConst)
Run Code Online (Sandbox Code Playgroud)
但这不是最佳选择.
有没有更好的办法?