我有一个接受hashTable的方法,我使用concat将它添加到另一个hashTable的末尾,但是我收到此错误:
System.Linq.Enumerable.Concat<TSource>(this System.Collections.Generic.IEnumerable<TSource>, System.Collections.Generic.IEnumerable<TSource>)'无法从用法中推断出方法的类型参数.
我不完全明白这意味着什么或我错了什么.我的方法看起来像这样:
public void resetCameras(Hashtable hashTable)
{
Hashtable ht = new Hashtable();
ht.Add("time", 2.0f);
ht.Add("easeType","easeInOutQuad");
ht.Add("onupdate","UpdateSize");
ht.Add("from",size);
ht.Add("to",5.0f);
if(hashTable != null) {
ht = ht.Concat(hashTable);
}
iTween.ValueTo(gameObject,ht);
}
Run Code Online (Sandbox Code Playgroud)
希望你能帮助解释我的错误,对C#来说还是新手.
我有一个方法,它接受一个接口类型并评估类型是什么,并从中我需要返回一个与之相关的类型.但我不确定如何使类型返回灵活.我试过这样的事情:
public static T GridPosition <T>(IReSizeableGrid gridData) {
if (gridData is Hex) {
var hexGrid = (HexGrid) gridData;
return HexLibrary.WorldToHex(WorldPoint(Input.mousePosition, GroundPlane), hexGrid);
}
if (gridData is QuadGrid) {
var quadGrid = (QuadGrid) gridData;
return Grid.Get(WorldPoint(Input.mousePosition, GroundPlane), quadGrid);
}
throw new Exception("Wrong type passed to GridPosition: " + gridData.GetType());
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
无法隐式转换类型
Hex to T
我在这里使用正确的线路T吗?试图了解如何正确使用它.
我有以下属性和支持字段:
private Vector3 _positionB;
public Vector3 PositionB
{
get
{
if (_nodeB == null) return _positionB;
else return _nodeB.Position;
}
set
{
_positionB = value;
UpdateMesh();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,我有时会继续将值分配给类中的支持字段并跳过属性设置器(因此由于逻辑错误它不会自动更新)。
我更愿意通过属性强制分配,以便设置器随后运行相关函数。
有没有办法将其抽象出来以强制只分配给类中的属性?
我的脚本有问题.我试图在一个球体中随机创建一个星场,用于我的统一场景.但我对团结和c#是新手,所以我有点困惑.
星星有一个固定的位置,所以它们不应该移动,因此在Start()中创建; 然后在Update()中绘制;
问题是我收到此错误:
MissingComponentException: There is no 'ParticleSystem' attached to the "StarField" game object, but a script is trying to access it.
You probably need to add a ParticleSystem to the game object "StarField". Or your script needs to check if the component is attached before using it.
Stars.Update () (at Assets/Stars.cs:31)
Run Code Online (Sandbox Code Playgroud)
如果我手动添加一个粒子系统组件,它会导致一大堆闪烁的橙色斑点,这是我不想要的,所以我想在脚本中添加一些组件.
这是我附加到空游戏对象的脚本:
using UnityEngine;
using System.Collections;
public class Stars : MonoBehaviour {
public int maxStars = 1000;
public int universeSize = 10;
private ParticleSystem.Particle[] points;
private void …Run Code Online (Sandbox Code Playgroud) 我的Go服务器上有一个工作的TCP套接字设置.我接受传入连接,运行for循环并使用net.Conn.Read函数读取传入数据.
但这对我来说没有意义.如何知道已收到完整邮件以便继续返回邮件大小?
这是我目前的代码:
func (tcpSocket *TCPServer) HandleConnection(conn net.Conn) {
println("Handling connection! ", conn.RemoteAddr().String(), " connected!")
recieveBuffer := make([]byte, 50) // largest message we ever get is 50 bytes
defer func() {
fmt.Println("Closing connection for: ", conn.RemoteAddr().String())
conn.Close()
}()
for {
// how does it know the end of a message vs the start of a new one?
messageSize, err := conn.Read(recieveBuffer)
if err != nil {
return
}
if messageSize > 0 { // update keep alive since we got …Run Code Online (Sandbox Code Playgroud) 我遇到了这个错误,但不知道如何修复它。
我试图将一个方法作为参数传递给另一个函数作为操作。我有一个定义了两种方法的接口:
//ISegment interface
void SetNodeA(in INode node);
void SetNodeB(in INode node);
Run Code Online (Sandbox Code Playgroud)
接下来我创建一个段,我想将此方法传递给另一个函数:
ISegment segment = GetSegment();
Execute(start, segment.SetNodeA);
Execute(end, segment.SetNodeB);
Run Code Online (Sandbox Code Playgroud)
我的执行函数如下所示:
void Execute(in EndPoint point, in Action<INode> fnc)
{
Verify(segment);
Verify(point.Node);
fnc?.Invoke(point.Node); //set the node
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到此错误:
参数 2:无法从“方法组”转换为“实际操作”
不确定这里的方法组意味着什么或如何修复它。
我有一段简单的代码,可以将 C# 字符串编码为 UTF-8,然后从中创建一个字节数组。但我想知道如何使用我已经在起始索引处创建的字节数组编码为 UTF-8?
这就是我当前编码并获取结果字节数组的方式:
byte[] result = Encoding.UTF8.GetBytes(myString);
Run Code Online (Sandbox Code Playgroud)
但我有一个预先制作的字节数组,如果有意义的话,我更愿意在特定索引处写入。是否有任何内置方法可以做到这一点,如果没有,我将如何去做?
我有两个名称空间:
System.Numerics和UnityEngine
两者都有类型Vector3.
所以现在,当我想要使用它时,我必须在它之前声明哪个命名空间.像这样:
protected struct CVN
{
public Complex h;
public UnityEngine.Vector2 d;
public UnityEngine.Vector3 n;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法定义我只想Vector3从一个命名空间,所以我不必总是NameSpaceHere.Vector3每次都输入?
或者我坚持每次都说明命名空间的繁琐性质.特别是因为我只需要Complex来自Numerics 的类型它非常烦人.
我对 C# 真的很陌生,我是从 Javascript 开始的,所以理解 C# 的行为有点困难。
我正在尝试在 for 循环内创建一个简单的对象,然后显示分配的值,但这存在范围问题,并且不清楚如何在 for 循环之外访问它?
这是我的代码设置:
public class Player{
public int identity;
public int score;
public Player(int id){
identity = id;
score = 0;
}
}
for (int i = 0; i < max; i++){
Player player = new Player(i);
}
//here i want to access a player and print the information for said player
Run Code Online (Sandbox Code Playgroud)
我不知道如何在循环之外访问新创建的玩家,这是如何完成的?
所以我有一种情况,根据我想要的最终结果,我需要不同数量的函数参数.
我是C#的新手,并且听说过重载函数,这不是我以前见过的(我从JavaScript开始).
但它看起来有点脏,即使它确实有效,也不是一个好的做法.使用重载函数通常不是一个好主意,我可能会做更多工作的替代方案,但重载会让生活更轻松.
使用多个具有相同名称的方法感觉非常不舒服.这些是标准功能和可接受的代码实践吗?或者它可能导致未来的一些混乱问题,我的缺乏经验还不知道,因此我应该避免它?
我正在尝试匹配对结构中字段的引用,但我不确定如何将其作为案例设置而不是 if 语句来执行。
这是我对 if 语句所做的一般想法:
public struct Test
{
// MyObject is a class
public MyObject A;
public MyObject B;
public MyObject C;
public bool Distance(MyObject obj, out float distance){
distance = float.PositiveInfinity;
if(A == obj){
distance = DistanceFrom(A);
return true;
}
if(B == obj){
distance = DistanceFrom(B);
return true;
}
if(C == obj){
distance = DistanceFrom(C);
return true;
}
//object does not relate to this struct so return false
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
我的实际结构中有超过 3 个(总共 24 个),但我想知道如何通过 …