我创建了一个定义如下的结构:
public struct Piece
{
string pieceType;
string pCode;
bool dead;
bool highlighted;
bool specialUsed;
bool moved;
Material defaultMaterial;
}
Run Code Online (Sandbox Code Playgroud)
并在一个单独的子程序中创建了一个字典来保存这种类型的条目:
Dictionary<string, Piece> pieceDict;
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用 foreach 循环来填充它,如下所示:
GameObject[] pieces = GameObject.FindGameObjectsWithTag("Piece");
foreach (GameObject piece in pieces)
{
string pCode = GetPieceCode(piece);
pieceDict.Add(pCode, new Piece());
pieceDict[pCode].pCode = pCode;
//More properties once I get this working will go here.
}
Run Code Online (Sandbox Code Playgroud)
但是,似乎出了点问题,因为它不允许我访问新条目的各个属性。收到此错误:
Cannot modify the return value of 'Dictionary<string, Piece>.this[string]' because it is not a variable
Run Code Online (Sandbox Code Playgroud)
我已经查看了文档,但无法弄清楚我哪里出错了,因此我们将不胜感激!
我正在使用 UnityEngine。
我只是习惯了使用 lambdas 和所有这些好东西。但是,我不知道在这种情况下我需要提供什么论据。
我试图修改 I 字符串以用它的值替换字典中条目的所有实例,没什么特别的,我可以用一个简单的foreach循环来做到这一点,但我试图将其用作学习练习。
到目前为止,我的代码如下:
string maskString = Masks[alias];
Regex regex = new Regex(@"({[\w+|\d]+})");
MatchCollection matches = regex.Matches(maskString);
string[] constants = matches.Cast<Match>().Select(m => m.Value).ToArray();
string maskedString = "";
if (constants.All(constant => Constants.ContainsKey(constant)))
{
constants.ForEach(constant => maskedString = maskedString.Replace(constant, Constants[constant]));
}
Run Code Online (Sandbox Code Playgroud)
但是,我收到此错误:There is no argument given that corresponds to the required formal parameter 'action' of 'Array.ForEach<T>(T[], Action<T>)'。在我看来,我以lambda表达式的形式提供操作,但我不知道为什么它需要另一个数组或我应该给它什么数组。
我试图为它提供null,string[]而new [] {typeof(string)}但这些只是导致更多的错误。
我是否可以使用此结构进行此操作,还是仅使用传统foreach循环更实用?
所以,我正在尝试制作一个国际象棋引擎来温习一下我的生锈,我通常是一名 C# 程序员。
在 C# 中,对于我的数据表示,我有类似的内容:
public abstract class Piece
{
public Coordinate Location;
public abstract bool IsWhite {get;}
public abstract string PieceCode {get;} // e.g. K for a king
public abstract Move[] GetPossibleMoves(Board board);
}
public sealed class Pawn:Piece {//etc...}
Run Code Online (Sandbox Code Playgroud)
然后我的董事会将拥有一系列可以使用的所有组件。
我相信,在 Rust 中,这样的事情将是应用更高级枚举的好例子,所以像这样:
struct Piece {
position: Coordinate,
isWhite: bool,
charCode: char
}
enum PieceType {
King(Piece),
Queen(Piece),
Bishop(Piece),
Knight(Piece),
Rook(Piece),
Pawn(Piece)
}
Run Code Online (Sandbox Code Playgroud)
但随后我不太确定应该将实现放在哪里以获得可能的动作。每个Piece实例都不知道它是什么类型,将PieceType枚举添加到Piece结构中感觉就像是这种结构试图实现的目标的对立面。
我想我可以有一个Board带有 a 的结构Vec<PieceType>,并且有一个类似于GetMovesFor(PieceType) …
对于可怕的标题道歉,我想不出更好的方式来表达它.
基本上我有一个抽象基类Category和从中继承的整个派生类主机.有可能做一些事情:
List<Category> catList = new List<Category>();
catList.Add(new Category(myCategoryTypeString));
Run Code Online (Sandbox Code Playgroud)
其中myCategoryTypeString将始终是其中一个派生类的名称,而是让它创建该派生类的新对象(可能是使用字符串上的开关来确定要使用的类).
这样的东西:
catList.Add(new Category("Engineering"));
Run Code Online (Sandbox Code Playgroud)
会Engineering : Category在列表中添加一个新的类型对象吗?
如果可能的话怎么会这样做呢?我的抽象类是这样定义的:
abstract class Category
{
private string line;
private bool ToChallenge;
private string[] columns;
private int oppLevel;
protected Category(string line)
{
this.line = line;
columns = line.Split(',');
}
public abstract bool IsAnomoly();
public abstract void CategoriseAnomoly();
public abstract void WriteLine();
}
Run Code Online (Sandbox Code Playgroud) 我认为这个问题是不言自明的。
MAUI 是跨平台 UI 框架 Xamarin.Forms 的演变。
Blazor 是 MS 的新前端 C# 框架。
然而,MAUI Blazor,我不清楚。
我怀疑它是以下之一:
那么混合 maui/blazor 应用程序到底有什么用呢?他们可以让您做哪些仅使用 MAUI 或 Blazor 无法完成的事情?
我正在创建一个 SourceGenerator,它将读取定义流畅 API 的不同状态的 YML 文件,然后生成相关接口来实现语法。
我刚刚看到一条警告,告诉我添加EnforceExtendedAnalyzerRules到我的 csproj,我已经这样做了。现在它告诉我不应该在分析器中执行文件 IO。
我的主要问题是:
.net 框架中是否存在数据集合(理想情况下collections.generic可以处理三个不同的对象(例如int、string和float),从而可以在给定元素之一的情况下访问其他两个元素(假设每个对象都是唯一的)。
我不知道这是否存在,或者即使它可以被创建,但理想情况下它的工作方式与 a 类似,Dictionary<key,value>但本质上是Collection <key,key,key>一种可以像Collection[key].third = data.
正如我所说,我不知道这种安排是否存在;如果是的话,请您指出正确的方向,如果没有,请告诉我是否有任何关于如何实现这一目标的想法。
提前致谢。
我编写了一个C#控制台应用程序,在它完成所有处理后输出DateTime到磁盘.这样做是这样的:
writer.WriteLine(myDateTime).
使用以下内容阅读本文时,同样的控制台应用程序没有问题DateTime:
DateTime.Parse(reader.ReadLine())
然而,当我尝试在我的单独Asp.Net程序中使用以下代码时,我收到一个错误,说我string的不是有效的DateTime,至少可以说是奇怪的.
StreamReader reader = new StreamReader(@"D:\InformerReports\Archive\ReliabilityData\StartTime.hist");
string dateString = reader.ReadLine();
return DateTime.Parse(dateString);
Run Code Online (Sandbox Code Playgroud)
我已经检查了它正在读的字符串是10/25/2016 12:00:00 AM.我也试图使用,return DateTime.ParseExact(dateString, "dd/MM/yyyy hh:mm:ss tt",null)但这会返回相同的错误.
我似乎无法理解为什么在同一个文件上执行的相同代码在一种情况下工作而不在另一种情况下工作.我很感激一些帮助.
我有以下内容enum:
[Flags]
public enum Status { Nominal, Modified, DirOneOnly, DirTwoOnly, DirOneNewest, DirTwoNewest }
Run Code Online (Sandbox Code Playgroud)
我试图看看该Modified位是否已设置为true并尝试了以下方法:
if(_stateFlags.HasFlag(Status.Modified))
{
//DoStuff
} //Found out why this doesn't work after reading docs.
Run Code Online (Sandbox Code Playgroud)
和
if((_stateFlags & Status.Modified) == Status.Modified)
{
//DoStuff
}
Run Code Online (Sandbox Code Playgroud)
后者是我进一步研究使我相信会起作用的方法.但是,当我这样做时_stateFlags = Status.DirTwoOnly,上述陈述仍然似乎在评估true哪个让我感到困惑.
我做了一些根本错误的事吗?
在表现方面,做什么有什么不同:
stringX + 'y'vs stringX + "y"?
如果有差异,为什么会有?
我的问题主要与C#有关.
c# ×9
enums ×2
arrays ×1
asp.net ×1
blazor ×1
collections ×1
datetime ×1
foreach ×1
inheritance ×1
lambda ×1
maui ×1
maui-blazor ×1
roslyn ×1
rust ×1