我需要在运行时更改属性的参数.我将我的问题简化为简单的例子.
属性类:
[AttributeUsage(AttributeTargets.Property)]
public class MyAttribute : Attribute
{
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
简单实体,它使用属性修饰属性:
public class MyEntity
{
[MyAttribute(Name="OldValue1")]
public string Data1{ get; set; }
[MyAttribute(Name = "OldValue2")]
public string Data2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我创建了MyEntity类的实例.我可以更改对象属性的值,但是我不能在对象实体上更改属性的属性Name的值.可能吗?
对象实体的属性值我可以用这部分代码改变:
entityProp.SetValue(entity,"NewData",null);
Run Code Online (Sandbox Code Playgroud)
但我不知道如何更改对象实体上属性Name的值
这不起作用:
Run Code Online (Sandbox Code Playgroud)attProp.SetValue(attribute,"NewData",null);
属性的价值名称仍然是原创的.
这是所有测试代码.谢谢你的帮助.
[TestMethod]
public void Test()
{
var entity = new MyEntity
{
Data1 = "OldData",
Data2 = "OldData"
};
PropertyInfo[] entityProps = entity.GetType().GetProperties();
foreach (var entityProp in entityProps)
{
var attribute = Attribute.GetCustomAttribute(entityProp, …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个目录并在一个文件中复制一个文件(pdf)Parallel.ForEach.
下面是一个简单的例子:
private static void CreateFolderAndCopyFile(int index)
{
const string sourcePdfPath = "c:\\testdata\\test.pdf";
const string rootPath = "c:\\testdata";
string folderDirName = string.Format("Data{0}", string.Format("{0:00000000}", index));
string folderDirPath = rootPath + @"\" + folderDirName;
Directory.CreateDirectory(folderDirPath);
string desPdfPath = folderDirPath + @"\" + "test.pdf";
File.Copy(sourcePdfPath, desPdfPath, true);
}
Run Code Online (Sandbox Code Playgroud)
上述方法创建一个新文件夹并将pdf文件复制到新文件夹.它创建了这个目录树:
TESTDATA
-Data00000000
-test.pdf
-Data00000001
-test.pdf
....
-Data0000000N
-test.pdf
Run Code Online (Sandbox Code Playgroud)
我试着CreateFolderAndCopyFile在Parallel.ForEach循环中调用该方法.
private static void Func<T>(IEnumerable<T> docs)
{
int index = 0;
Parallel.ForEach(docs, doc =>
{
CreateFolderAndCopyFile(index);
index++;
});
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码时,它完成以下错误: …