我怎样才能转换自:
object[] myArray
Run Code Online (Sandbox Code Playgroud)
至
Foo[] myCastArray
Run Code Online (Sandbox Code Playgroud) 虽然我可以将一个字符串向上转换为一个对象,但是我无法将IList字符串向上转换为IList对象.怎么会?现在该怎么做才能将所有项目都复制到一个新的IList?
static void ThisWorks()
{
IList<object> list = new List<object>();
list.Add("I can add a string since string : object");
}
static void ThisDoesNotWork()
{
// throws an invalid cast exception
IList<object> list = (IList<object>) new List<string>();
list.Add("I'm never getting here ... why?");
}
Run Code Online (Sandbox Code Playgroud) 我通常m_在private田野和s_前面的static成员面前添加一个.
用像这样的代码
protected static readonly Random s_Random = new Random ();
Run Code Online (Sandbox Code Playgroud)
我通过VS2008的代码分析得到以下警告:
CA1709:Microsoft.Naming:通过将其更改为"S"来更正成员名称"Bar.s_Random"中's'的大小写.CA1707:Microsoft.Naming:从成员名称"Bar.s_Random"中删除下划线.如何解决这个问题?我应该简单地删除s_?或者为此警告添加全局抑制?
编辑:我的公司缺乏编码标准,所以我可以为我的代码定义它们.(是的我懂...)
如果你认为s_一般应该删除,我很高兴你能提供官方消息来源.
c# code-analysis fxcop naming-conventions visual-studio-2008
为了清楚起见,我们说我们有学生和班级,这是一个多对多的关系.
我有一个词典,其中键是学生ID,而Enumerable是一个类的集合(比如我们只有id),我想将它恢复为classId的词典,学生
Linq有办法做到这一点吗?我可以想办法用循环来做这个,但我确信有办法做到这一点.
我有以下代码:
var tagToPosts = (from t2p in dataContext.TagToPosts
join t in dataContext.Tags on t2p.TagId equals t.Id
select new { t2p.Id, t.Name });
//IQueryable tag2postsToDelete;
foreach (Tag tag in tags)
{
Debug.WriteLine(tag);
tagToPosts = tagToPosts.Where(t => t.Name != tag.Name);
}
IQueryable tagToPostsToDelete = (from t2p in dataContext.TagToPosts
join del in tagToPosts on t2p.Id equals del.Id
select t2p);
dataContext.TagToPosts.DeleteAllOnSubmit(tagToPostsToDelete);
Run Code Online (Sandbox Code Playgroud)
where tags是List<Tag>- 构造函数创建的标签列表,因此它们没有id.我运行代码将一个刹车点放在Debug上,然后等待几个周期.然后我将WatchToPosts.ToList()放在Watch窗口中以便执行查询.在SQL事件探查器中,我可以看到以下查询:
exec sp_executesql N'SELECT [t0].[Id], [t1].[Name]
FROM [dbo].[tblTagToPost] AS [t0]
INNER JOIN [dbo].[tblTags] AS [t1] ON [t0].[TagId] = …Run Code Online (Sandbox Code Playgroud) 我创建了一个MethodInfo的实例:
MethodInfo theMethod = typeof(Reciever).GetMethod("methodName", parameterTypes);
Run Code Online (Sandbox Code Playgroud)
现在我想知道theMethod的返回类型是否为void.怎么样?
我对函数参数的使用有疑问.
在过去,我总是编写我的代码,以便函数所需的所有信息都作为参数传递.即不使用全局参数.
然而,通过查看其他人的代码,没有参数的函数似乎是常态.我应该注意,这些是针对类的私有函数,并且作为参数传递的值实际上是该类的私有成员变量.
这导致更整洁的代码和我开始倾向于私人功能,但希望其他人的意见.
例如
Start();
Process();
Stop();
Run Code Online (Sandbox Code Playgroud)
更整洁,更可读:
ParamD = Start(paramA, ParamB, ParamC);
Process(ParamA, ParamD);
Stop(ParamC);
Run Code Online (Sandbox Code Playgroud)
它确实从方法的角度来打破封装,但不是从类的角度来看.
这是C#代码.你能帮我把它翻译成powershell吗?
private static void Main(string[] args)
{
byte[] buffer = (byte[]) Registry.LocalMachine.OpenSubKey(@"HARDWARE\ACPI\DSDT\HP____\8510x\00010000").GetValue("00000000");
if (File.Exists("8510x.orig"))
{
Console.WriteLine("File 8510x.orig already exists.");
}
else
{
using (FileStream stream = new FileStream("8510x.orig", FileMode.CreateNew))
{
stream.Write(buffer, 0, buffer.Length);
stream.Flush();
stream.Close();
}
Console.WriteLine("Wrote 8510x.orig.");
}
}
Run Code Online (Sandbox Code Playgroud) MSDN文档声明"表达式是可以计算为单个值,对象,方法或命名空间的代码片段."
有人可以解释一下表达式评估命名空间意味着什么 - 这怎么可能?
编辑:修正错字
我编写了以下代码以从ASP.Net MVC中的ViewData.Modelstate属性中引出异常以及引用该属性的字符串键.我认为应该可以用Linq表达式做到这一点,但它完全让我感到困惑.
var exceptions = new Dictionary<string, Exception>();
foreach (KeyValuePair<string, ModelState> propertyErrorsPair in ViewData.ModelState)
{
foreach (var error in propertyErrorsPair.Value.Errors)
{
if (error.Exception != null)
{
exceptions.Add(propertyErrorsPair.Key, error.Exception);
}
}
}
Run Code Online (Sandbox Code Playgroud)
那么Linq的做法是什么?我猜它可能与SelectMany有关,但正如我所说,我无法弄清楚如何实现这一目标.
谢谢
c# ×8
.net ×4
linq ×3
casting ×2
arrays ×1
asp.net ×1
asp.net-mvc ×1
dictionary ×1
expression ×1
file ×1
function ×1
fxcop ×1
generics ×1
lambda ×1
linq-to-sql ×1
methodinfo ×1
parameters ×1
powershell ×1
reflection ×1
registry ×1
stream ×1
void ×1