这是我的代码:
private class Person
{
private string myName;
private int myValue;
public Person(string name, int value)
{
myName = name;
myValue = value;
}
public override string ToString()
{
return myName;
}
public string Name
{
get { return myName; }
set { myName = value; }
}
public int Value
{
get { return myValue; }
set { myValue = value; }
}
}
Run Code Online (Sandbox Code Playgroud)
我用它来填充DataGridViewComboBoxCell,如下所示:
myDataGridViewComboBoxCell.ValueMember = "Value";
myDataGridViewComboBoxCell.DisplayMember = "Name";
myDataGridViewComboBoxCell.Items.Add(new Person("blabla", someNumber));
Run Code Online (Sandbox Code Playgroud)
我现在要做的就是选择一个人:
myDataGridViewComboBoxCell.Value = someNumber;
Run Code Online (Sandbox Code Playgroud)
但继续得到"价值无效" …
我有一个方法:
FillListBox();
Run Code Online (Sandbox Code Playgroud)
我从不同的地方调用这个方法..但有时会发生,事情被加载了两次!
现在我正在尝试做类似的事情:
if (listBox.Items[1].ToString() == "hello")
{
DO NOT FILL
}
else
{
FILL
}
Run Code Online (Sandbox Code Playgroud)
这不行!:(
Fault: InvalidArgument=Value of '1' is not valid for 'index'.
Parameter name: index
Run Code Online (Sandbox Code Playgroud)
这样的事情:
if(listBox.Items.Contains("hello"))
{
DONT FILL
}
Run Code Online (Sandbox Code Playgroud)
不要工作:(
我能做什么?
我希望我的地图是可搜索的,并且我希望能够从其中剔除很久以前插入其中的元素(使用像 api 这样的map.remove(map.get_iterator_to_oldest_inserted_element())),例如 queqe 和 map 的混合。STL 或 Boost 中是否有这样的容器?
我在这个问题上非常困惑.
System.Collections.IDictionaryEnumerator通过System.Collections.IEnumerator提供以下哪些优势?
a:它添加了直接访问Key和Value的属性
b:它被优化以处理Dictionary的结构.
c:它提供了确定是否按键或值顺序枚举字典的属性
d:它提供反向查找方法以区分键和特定值
我正在尝试使用protobufs序列化一些类.我使用NuGet安装了protobuf-net,使用属性正确装饰了我的代码,一切运行良好.
但是,最终消息将在C#中创建,但在其他环境中消耗,因此我需要从C#创建.proto文件,或者 - 对我来说似乎更合理 - 从.proto文件创建C#代码.
无论我做什么,我都找不到安装在我电脑任何地方的ProtoGen.exe.我也找到了这个旧帖子,但是当我创建一个.proto文本文件时,没有发生任何类似的事情.手动添加ProtoBufTool也不起作用.
我错过了什么?
我有dll接受来自C++的字节数组的指针,并尝试通过以下方式将此数据移动到AnsiString中
procedure Convert(const PByteArr: Pointer; ArrSize: Cardinal); export; cdecl;
var
Buf: AnsiString;
begin
SetString(Buf, PAnsiChar(PByteArr^), ArrSize);
end;
Run Code Online (Sandbox Code Playgroud)
如果我从Delphi调用这个方法
procedure Try;
var
M: TMemoryStream;
Arr: TBytes;
begin
M := TMemoryStream.Create;
try
M.LoadFromFile('myfile.dat');
SetLength(Arr, M.Size);
M.Position := 0;
M.Read(Arr[0], M.Size);
finally
M.Free;
end;
Convert(@Arr, Length(Arr));
end;
Run Code Online (Sandbox Code Playgroud)
它工作正常,但从c ++如果在SetString上提供AV.
请帮我解决一下这个.
来自RredCat:
让我为Yuriy的问题添加一些解释:首先是我们使用的语言.我们需要在C#项目中调用Delphi dll.为此,我创建了C++\CLI层(代理).现在关于头文件中的C++\CLI代码:
HINSTANCE hDelphiDLL;
typedef void (*pPBDFUNC)(byte* aBytes, int size);
pPBDFUNC Convert;
Run Code Online (Sandbox Code Playgroud)
在cpp中我在构造函数中设置Convert:
hDelphiDLL = LoadLibrary(<path to dll>);
if(NULL != hDelphiDLL ){
pPBDFUNC clb= GetProcAddress(HMODULE(hDelphiDLL), "Convert");
if(NULL != clb){
Convert= pPBDFUNC (clb); …Run Code Online (Sandbox Code Playgroud) 我是新手,当我尝试在一行中添加多个单元格时,它表示内容不可读.这就是我所拥有的.
SpreadsheetDocument ssDoc = SpreadsheetDocument.Create(saveFile, SpreadsheetDocumentType.Workbook);
// Add a WorkbookPart to the document
WorkbookPart workbookPart = ssDoc.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
// Add a WorksheetPart to theWorkbookPart
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = ssDoc.WorkbookPart.Workbook.AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet()
{ Id = ssDoc.WorkbookPart.GetIdOfPart(worksheetPart),
SheetId = 1, Name = "Sheet1"
};
sheets.Append(sheet);
Worksheet worksheet = new Worksheet();
SheetData sheetData = new SheetData();
Row row = new Row();
Cell cell = new Cell()
{
CellReference …Run Code Online (Sandbox Code Playgroud) 我试图找到一种有效的方法来根据数组的每个字符串元素中的数值对字符串数组进行排序.我目前正在使用Array.Sort(array,customComparer)静态方法(快速排序),我的自定义比较器类(按降序排序)是:
class StringComparer : IComparer<string>
{
public int Compare(string a, string b)
{
string s1 = a;
string s2 = b;
Match matchA = Regex.Match(s1, @"\d+$");
Match matchB = Regex.Match(s2, @"\d+$");
long numberA = long.Parse(matchA.Value);
long numberB = long.Parse(matchB.Value);
if (numberB - numberA < 0)
{
return -1;
}
else
{
return 1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法非常有效,但有时需要花费太多时间进行排序,在一台2.4Ghz处理器上使用超过一分钟的10万个字符串数组.我想知道是否有更有效的方法来实现同样的目标.例如,实现不同的排序算法或采用另一种方法,例如使用字典并对值进行排序(值是字符串的数字部分).有什么建议?提前致谢!
我创建了一个简单的方法来返回一个属性,我知道它是一个来自对象属性层次结构的字符串.例如,对象与具有Subproperty"Contact"的属性"Person"的"契约"和子属性(已知已经是一个字符串)"PhoneNumber"
我打算将该方法用于特定的动态绑定目的.
调用该方法如下所示:GetProperty(contract,"Person.Contact.PhoneNumber");
我想知道以下代码的性能影响:
public string GetProperty(object obj, string name)
{
string[] index = name.Split('.');
object result = null;
for (int i = 0; i < index.Length - 1; i++)
{
result = TypeDescriptor.GetProperties(obj).Find(index[i], true).GetValue(obj);
if (result == null)
return null;
obj = result;
}
PropertyDescriptor pd = TypeDescriptor.GetProperties(result).Find(index.Last(), true);
return (string)pd.GetValue(result);
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
我有一个窗口应用程序,它试图连接一个MS Access文件,该文件已经准备好被另一个应用程序使用.当我停止该应用程序,然后我能够连接MS Access文件.否则会发生如下错误:
OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "AccessDb" returned message "Cannot start your application.
The workgroup information file is missing or opened exclusively by another user.
有没有办法可以在只读模式下打开连接.我必须从该文件中读取数据.
谢谢.
c# ×9
c++ ×2
performance ×2
.net ×1
ado.net ×1
algorithm ×1
arrays ×1
asp.net ×1
boost ×1
datagridview ×1
delphi ×1
dictionary ×1
interop ×1
listbox ×1
ms-access ×1
nuget ×1
openxml ×1
openxml-sdk ×1
protobuf-net ×1
sorting ×1
std ×1
stl ×1