9
var settings = new SettingsClass();
settings.SpecificValue = new List<SpecificValueClass>();

This is the code example in my C# project.

I have a python script which imports the .dll with this code example and I want to create this settings.SpecificValue variable within the python script.

Is it somehow possible without making a function in C# which I can call within python code.

public class SettingsClass
{
    public bool Timesync { get; set; }
    public string SystemName { get; set; }
    public string Timezone { get; set; }
    public List<SpecificValueClass> SpecificValue{ get; set; }
}

public class SpecificValueClass
{
    public string ID { get; set; }
    public int value { get; set; }
}

In python I want to call it like this:

settings = SettingsClass() <-- this call is no problem and I can do it with a dotNet library in python
settings.SystemName = systemname
settings.Timesync = timesync
settings.Timezone = "%s//%s" % (timezone1,timezone2)
settings.SpecificValue = ... <-- not sure how to make this to create a empty List / empty whatever so I can add 2 objects of the type SpecificValueClass 

(creating the 2 objects ob SpecificValueClass is also possible) So the only part that I can not get to work is the initialization of the settings.SpecificValue as it is a generic List ...

Any help would be appreciated

2
  • Yes it's possible. But you'd have to explain how is your .dll loaded in Python. [SO]: How to create a Minimal, Complete, and Verifiable example (mcve). Also what Python (version and distribution) are you using? Commented May 16, 2019 at 15:47
  • I am using an external tool - TestComplete - which makes the loading process via CLR Bridge - not sure if this information helps? Python 3.0 Commented May 16, 2019 at 16:52

1 Answer 1

6

Finally got it to work using the dotNet library from TestComplete but I guess it would be the same with the clr package from python. Just had to program the generics part myself which usually C# does with the tags:

typeListOf = dotNET.System.Type.GetType("System.Collections.Generic.List`1")
objType = dotNET.namespace.SpecificValueClass.zctor().GetType()
paramTypes = dotNET.System.Array.CreateInstance(dotNET.System.Type.GetType("System.Type"), 1)
paramTypes.SetValue(objType, 0)
typeListOfString = typeListOf.MakeGenericType(paramTypes)

newValue = dotNET.namespace.WattPeakValues.zctor()

newValue.ID = 1
settings.SpecificValue.Add(newValue)
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.