我有一个从PHP文件发送到Unity的项目列表WWW.
的WWW.text样子:
[
{
"playerId": "1",
"playerLoc": "Powai"
},
{
"playerId": "2",
"playerLoc": "Andheri"
},
{
"playerId": "3",
"playerLoc": "Churchgate"
}
]
Run Code Online (Sandbox Code Playgroud)
我[]从哪里修剪额外的string.当我尝试使用它解析它时Boomlagoon.JSON,只检索第一个对象.我发现我已经到deserialize()了列表并导入了MiniJSON.
但我很困惑如何deserialize()这个列表.我想遍历每个JSON对象并检索数据.如何使用C#在Unity中执行此操作?
我正在使用的课程是
public class player
{
public string playerId { get; set; }
public string playerLoc { get; set; }
public string playerNick { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
修剪后[]我可以使用MiniJSON解析json.但它只返回第一个KeyValuePair.
IDictionary<string, object> players = Json.Deserialize(serviceData) as IDictionary<string, object>;
foreach (KeyValuePair<string, …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Entity Framework 4,POCO和Code-Only设置项目.
在实体框架中导航属性的类型是否可以作为接口?
我有一个"任务"课程.可以将任务分配给用户或组,每个用户或组由单独的类表示并存储在单独的表中.这些类看起来像这样:
public class User : IAssignable
{
public string Name { get; set; }
public int ID { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class Group : IAssignable
{
public string Name { get; set; }
public int ID { get; set; }
public string Manager { get; set; }
public string Department { get; set; }
}
public class Task
{
public …Run Code Online (Sandbox Code Playgroud) 信号量的真正力量是:
限制可以同时访问资源或资源池的线程数
这是明白的.
但是我从来没有机会玩过度Wait接受超时整数的重载,但是 - 这似乎允许多个线程进入临界区,尽管我已经明确设置信号量不允许一次允许多个线程:
private readonly SemaphoreSlim _mutex = new SemaphoreSlim(1);
private void Main()
{
Task.Run(() => DelayAndIncrementAsync());
Task.Run(() => DelayAndIncrementAsync());
}
private void DelayAndIncrementAsync()
{
_mutex.Wait(2000);
try
{
Console.WriteLine(0);
Thread.Sleep(TimeSpan.FromSeconds(5));
Console.WriteLine(1);
}
finally
{
_mutex.Release();
}
}
Run Code Online (Sandbox Code Playgroud)
第一个线程进入互斥区域,打印"0"等待5秒,同时2秒后另一个线程进入临界区?
题
它不是在击败信号量的整个目的吗?
我将使用此超时的真实生活场景是什么,特别是当基本规则是 -
" 信号量 =限制可以同时访问资源或资源池的线程数
我对DI很新,所以我的知识并不是最好的.我目前正在开发Asp.Net Core MVC应用程序.
假设我有一个返回a的DLL DataSet(我可以完全控制这个DLL并可以根据需要更改它).
所以DLL中的代码如下所示:
public class DataStore : IDataStore
{
private readonly IConfiguration _configuration;
public DataStore(IConfiguration configuration)
{
_configuration = configuration;
}
public DataSet GetDataBySP(string spName, SqlParameter[] parameters = null)
{
DataSet ds = new DataSet();
using(var con = new SqlConnection(_configuration.GetConnectionString("conStr")))
{
using(var cmd = new SqlCommand(spName, con))
{
cmd.CommandType = CommandType.StoredProcedure;
if (parameters?.Length > 0)
cmd.Parameters.AddRange(parameters);
con.Open();
using (var da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}
return ds;
}
}
Run Code Online (Sandbox Code Playgroud)
现在假设我有一个名为class的类Foo,它只包含两个属性,如下所示:
public …Run Code Online (Sandbox Code Playgroud) 我开始一个过程
Process app = new Process();
app.StartInfo.UseShellExecute = false;
app.StartInfo.FileName = path;
app.StartInfo.Domain = "Domain";
app.StartInfo.UserName = "userName";
string password = "Password";
System.Security.SecureString ssPwd = new System.Security.SecureString();
for (int x = 0; x < password.Length; x++)
{
ssPwd.AppendChar(password[x]);
}
password = "";
app.StartInfo.Password = ssPwd;
app.Start();
Run Code Online (Sandbox Code Playgroud)
然后我确认它正在运行:
private bool IsRunning(string name)
{
Process[] processlist = Process.GetProcesses();
if (Process.GetProcessesByName(name).Length > 0)
{
string user = Process.GetProcessesByName(name)[0].StartInfo.UserName;
log.Debug("Process " + name + " is running by : " + user);
return true; …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Dictionary来记录Web服务上每个API路径的当前请求数,并增加和减少当前计数我认为一个好方法将使用,Interlocked.Increment()因为它增加了计数并在同一时间读取计数时间.
但是下面的代码给出了一个错误,说ref参数不被归类为变量,我猜是因为dict[key]它不是变量?
var dict = new Dictionary<string, int>();
dict.Add("a", 1);
int i = Interlocked.Increment(ref dict["a"]);
Run Code Online (Sandbox Code Playgroud)
我知道Interlocked.Increment()不能应用于属性,但不会想到通过密钥访问字典会有同样的问题.
最好的方法是什么?
编辑:这里有一些关于此的更多细节.
我正在尝试编写一些代码来限制Web服务的每个API路径上的API调用的数量,因此我有两个字典,策略字典指定每个API路径上允许的并发调用方数和第二个计数字典记录每个API路径上当前有多少呼叫者处于活动状态.
在Web服务执行任何传入请求之前,它将检查上述两个字典,以确定请求是否应该继续,或者只是立即返回HTTP 429(Too Many Requests)响应.
以下是代码的摘录,它首先检查是否存在匹配的策略,然后如果是,则检查是否违反了最大允许请求.
public override async Task Invoke(IOwinContext context)
{
var url = context.Request.Path.ToString();
var policy = _policies.FirstOrDefault(x => x.EndpointPath == url);
if (policy != null)
{
try
{
if (Interlocked.Increment(ref _currentRequests[policy]) > policy.MaxConcurrentConnection)
{
context.Response.StatusCode = 429;
var message = string.Format(
"Max API concurrent calls quota exceeded, please try again …Run Code Online (Sandbox Code Playgroud) 实际上我正在编写一个小应用程序(WinForms + C#),我正在阅读Excel文件.退出应用程序并转到任务管理器后,我发现Excel.exe仍在运行.当我多次运行我的应用程序时,我发现在任务管理器中运行了多个Excel.exe实例.
那么有人可以告诉我每次退出应用程序时需要做什么来杀死"Excel.exe"...
代码有点像这样:
ApplicationClass appClass = new ApplicationClass();
Workbook workBook = appClass.Workbooks.Open(path, 0, true, 5, "", "", true, XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Worksheet workSheet = (Worksheet) workBook.ActiveSheet;
Run Code Online (Sandbox Code Playgroud)
全部在此命名空间下:Microsoft.Office.Interop.Excel; 这是COM
真正的问题是反射和装配修补/挂钩.我将举一个简单的例子来展示我的问题,而不是太难理解主要问题.
所以让我们想象一下我有这些基本类:
public class Vehicle
{
public string Name;
public string Price;
public void DoSomething()
{
Main.Test(this);
}
}
public class Car : Vehicle
{
public int Wheels;
public int Doors;
}
Run Code Online (Sandbox Code Playgroud)
在主要代码上我运行它:
public class Main
{
public void Start()
{
Car testCar = new Car()
{
Name = "Test Car",
Price = "4000",
Wheels = 4,
Doors = 4
};
testCar.DoSomething();
}
public static void Test(Vehicle test)
{
// Is this allowed ?
Car helloWorld = (Car) test;
} …Run Code Online (Sandbox Code Playgroud) 我有一个主题,我在其中订阅在游戏中发生确定事件时应该调用的方法。
public Subject<SomeEvent> TestSubject = new Subject<SomeEvent>();
Run Code Online (Sandbox Code Playgroud)
某些实例订阅该主题。
TestSubject.Subscribe(MyMethod);
Run Code Online (Sandbox Code Playgroud)
我的目标是计算有多少方法已订阅该主题。我见过一些使用 Count() 扩展的示例,但我需要一个 int 作为返回值,这样我就可以在其他地方使用它,并且 Count() 返回一个 IObservable。
if (subjectCount > 0)
{
DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以获取某个主题的订阅数量,或者我是否需要手动跟踪它们(有一个 public int subjectSubcriptions 并在每次订阅方法时添加 1)?
c# unity-game-engine reactive-programming system.reactive observer-pattern
我有以下记录器配置和相关类如下。预期的日志消息如下:
2019-03-06 19:49:56.417 +05:30 [INFORMATION] [Main] Start
2019-03-06 19:49:56.435 +05:30 [INFORMATION] [Test1] Test1 logg
Run Code Online (Sandbox Code Playgroud)
我在控制台中看到了两个日志消息。但我只看到文件中的第一个日志。
namespace SerilogTest
{
public static class MyLogger
{
public static ILogger getLogger(String className)
{
string logTemplate = "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u}] [{SourceContext}] {Message}{NewLine}{Exception}";
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate: logTemplate)
.WriteTo.File("log.txt", outputTemplate: logTemplate)
.CreateLogger()
.ForContext("SourceContext", className);
return Log.Logger;
}
}
public class Program
{
private static ILogger Log = MyLogger.getLogger("Main");
private static void Main(String[] args)
{
Log.Information("Start");
Test1 t1 = new Test1();
Console.ReadKey();
}
}
public …Run Code Online (Sandbox Code Playgroud)