我正在使用Microsoft的Graph Api通过Intunes连接设备。我想合并托管设备和注册设备的结果。但是它们是两个不同的对象。如何将Microsoft.Graph.DirectoryObject类型的数组与Microsoft.Graph.ManagedDevice类型的对象合并?
public async Task<Array> GraphAsync() {
try
{
var graphClient = ClientFactory.GetGraphApiClient();
var uniqueUserId = ClaimsHelper.GetUniqueUserIdFromClaims();
var managedDevices = graphClient.Users[uniqueUserId].ManagedDevices;
var registeredDevices = graphClient.Users[uniqueUserId].RegisteredDevices;
var resultManaged = await managedDevices.Request().GetAsync();
var resultRegistered = await registeredDevices.Request().GetAsync();
Microsoft.Graph.DirectoryObject [] devices = resultRegistered.ToArray();
Microsoft.Graph.ManagedDevice [] devicesToAdd = resultManaged.ToArray();
int array1OriginalLength = devices.Length;
Array.Resize<Microsoft.Graph.DirectoryObject>(ref devices, array1OriginalLength + devices.Length);
Array.Copy(devicesToAdd, 0, devices, array1OriginalLength, devicesToAdd.Length);
return devices;
}
catch(Exception e)
{
throw new UnauthorizedException(e + "Error calling GraphClient.");
}
}
}
Microsoft.Graph.DirectoryObject和Microsoft.Graph.ManagedDevice都是不同的类型,因此无法将ManagedDevice类型的复制对象创建到DirectoryObject类型的数组中,反之亦然。两种类型都继承自类Microsoft.Graph.Entity。因此,您可以创建一个类型为Entity的新数组,并将两个数组的项目复制到新数组:
DirectoryObject[] devices = new DirectoryObject[2];
DirectoryObject directoryObject = new DirectoryObject();
directoryObject.DeletedDateTime = DateTimeOffset.Now;
devices[0] = directoryObject;
ManagedDevice[] devicesToAdd = new ManagedDevice[2];
ManagedDevice managedDevice = new ManagedDevice();
devicesToAdd[0] = managedDevice;
Entity[] entityArray = new Entity[devices.Length + devicesToAdd.Length];
Array.Copy(devices, entityArray, devices.Length);
Array.Copy(devicesToAdd, 0, entityArray, devices.Length, devicesToAdd.Length);
foreach(var entity in entityArray)
{
if(entity is DirectoryObject)
{
var castedObject = (DirectoryObject)entity;
var dateTime = castedObject.DeletedDateTime;
}
if(entity is ManagedDevice)
{
}
}
请记住,由于类型更改属性或特定于DirectoryObjects或ManagedDevice的方法,因此不再可访问。您将需要回退到特定类型以使用它们,如foreach循环所示。因此,如果您打算使用类型特定的属性来避免转换,则最好让函数返回更复杂的类型,例如自定义类或两个数组的元组。